apply FSL(Flora Software License)
[apps/home/call.git] / ui / src / vcui-view-popup.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.tizenopensource.org/license
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17
18 #include "vcui-application.h"
19 #include "vcui-document.h"
20 #include "vcui-view-popup.h"
21 #include "vcui-view-multi-call-split.h"
22 #include "vcui-view-multi-call-conf.h"
23 #include "vcui-view-multi-call-list.h"
24 #include "vcui-view-single-call.h"
25 #include "vcui-view-common.h"
26 #define VCONFKEY_BT_HEADSET_NAME "memory/bluetooth/sco_headset_name"
27
28 #define TICKER_TIMEOUT  2
29
30 #define POPUP_LIST_HD_W 610
31 #define POPUP_LIST_ITEM_HD_H 113
32
33 typedef struct {
34         Evas_Object *glist;
35         Evas_Object *btn;
36
37         Elm_Genlist_Item_Class *itc_option_list;
38         char *text_buffer[3];
39 }_second_mtcall_popup_data_t;
40
41 static _second_mtcall_popup_data_t *g_popup_data;
42
43 static void __vcui_view_popup_response_cb_vol_voice(void *data, Evas_Object *obj, void *event_info);
44 static void __vcui_view_popup_response_cb_vol_ringtone(void *data, Evas_Object *obj, void *event_info);
45 static void __vcui_view_popup_response_cb_vol_bt(void *data, Evas_Object *obj, void *event_info);
46
47 static void __vcui_view_popup_win_del(void *data)
48 {
49         CALL_UI_DEBUG("..");
50         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
51
52         CALL_UI_DEBUG("delete the popup main_win - if created...");
53         if (ad->popup_mw != NULL) {
54                 CALL_UI_DEBUG("main_win is NOT null");
55                 evas_object_del(ad->popup_mw);
56                 ad->popup_mw = NULL;
57         }
58 }
59
60 void _vcui_view_popup_unload(Evas_Object *popup_eo)
61 {
62         CALL_UI_DEBUG("..");
63         vcui_app_call_data_t *ad = _vcui_get_app_data();
64
65         if (popup_eo) {
66                 evas_object_hide(popup_eo);
67                 evas_object_del(popup_eo);
68                 popup_eo = NULL;
69         }
70
71         __vcui_view_popup_win_del(ad);
72         _vcui_cache_flush();
73
74         return;
75 }
76
77 static void __vcui_view_popup_response_cb_terminate(void *data, Evas_Object *obj, void *event_info)
78 {
79         CALL_UI_DEBUG("..");
80         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
81
82         if (ad->popup_eo) {
83                 CALL_UI_DEBUG("popup eo delete.");
84                 evas_object_hide(ad->popup_eo);
85                 evas_object_del(ad->popup_eo);
86                 ad->popup_eo = NULL;
87         }
88         _vcui_cache_flush();
89         __vcui_view_popup_win_del(ad);
90
91         _vcui_view_common_call_terminate_or_view_change();
92
93         return;
94 }
95
96 static void __vcui_view_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
97 {
98         CALL_UI_DEBUG("..");
99         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
100
101         if (ad->popup_eo) {
102                 CALL_UI_DEBUG("popup eo delete.");
103                 evas_object_hide(ad->popup_eo);
104                 evas_object_del(ad->popup_eo);
105                 ad->popup_eo = NULL;
106         }
107         _vcui_cache_flush();
108         __vcui_view_popup_win_del(ad);
109         return;
110 }
111
112 /* create a separate main window for the popups with a high priority   */
113 /* this window will always be displayed on top, even on a lock screen  */
114 static Evas_Object *__vcui_view_popup_create_win(vcui_app_call_data_t *ad, const char *name)
115 {
116         CALL_UI_DEBUG("..");
117         Ecore_X_Window xwin;
118         Evas_Object *eo;
119         int w, h;
120
121         CALL_UI_DEBUG("create the popup main_win...");
122         eo = elm_win_add(NULL, name, ELM_WIN_DIALOG_BASIC);
123         if (eo) {
124                 elm_win_alpha_set(eo, EINA_TRUE);
125                 elm_win_title_set(eo, name);
126                 elm_win_borderless_set(eo, EINA_TRUE);
127                 elm_win_raise(eo);
128                 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
129                 evas_object_resize(eo, w, h);
130
131                 /* Set the popup window type as LEVEL-HIGH so it is always displayed on top */
132                 CALL_UI_DEBUG("...Set HIGH priority...");
133                 xwin = elm_win_xwindow_get(eo);
134                 ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
135                 utilx_set_system_notification_level(ecore_x_display_get(), xwin, UTILX_NOTIFICATION_LEVEL_HIGH);
136
137                 elm_win_rotation_with_resize_set(eo, ad->rotate_angle);
138                 evas_object_show(eo);
139         }
140
141         return eo;
142 }
143
144 void _vcui_view_popup_load(char *popup_msg, double time_out, int bterminate)
145 {
146         CALL_UI_DEBUG("msg:[%s], bterminate:[%d]", popup_msg, bterminate);
147         vcui_app_call_data_t *ad = _vcui_get_app_data();
148         char *markup_text = NULL;
149
150         if (popup_msg == NULL) {
151                 return;
152         }
153
154         _vcui_view_popup_unload(ad->popup_eo);
155
156 #ifdef  CALL_MW
157         if (ad->bwin_top) {
158                 CALL_UI_DEBUG("parent window TOP");
159                 ad->popup_eo = elm_popup_add(ad->win_main);
160                 _vcui_show_main_ui_set_flag();
161         } else
162 #endif
163         {
164                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
165                 ad->popup_eo = elm_popup_add(ad->popup_mw);
166         }
167
168         markup_text = evas_textblock_text_utf8_to_markup(NULL, popup_msg);
169         if (markup_text) {
170                 evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
171                 elm_object_text_set(ad->popup_eo, markup_text);
172                 elm_popup_timeout_set(ad->popup_eo, time_out);
173                 if (bterminate == 0) {
174                         evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad);
175                 } else {
176                         evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad);
177                 }
178                 evas_object_show(ad->popup_eo);
179                 free(markup_text);
180                 markup_text = NULL;
181         } else {
182                 evas_object_del(ad->popup_eo);
183                 ad->popup_eo = NULL;
184                 __vcui_view_popup_win_del(ad);
185                 return;
186         }
187 }
188
189 void _vcui_view_popup_replace(char *popup_msg, double time_out, int bterminate)
190 {
191         CALL_UI_DEBUG("msg:[%s], bterminate:[%d]", popup_msg, bterminate);
192         vcui_app_call_data_t *ad = _vcui_get_app_data();
193         char *markup_text = NULL;
194
195         if (ad->popup_eo == NULL) {
196                 _vcui_view_popup_load(popup_msg, time_out, bterminate);
197         } else {
198                 if (popup_msg == NULL) {
199                         return;
200                 }
201
202                 if (ad->view_top != -1) {
203 #ifdef  CALL_MW
204                         _vcui_raise_main_win();
205 #else
206                         if (ad->popup_mw != NULL)
207                                 elm_win_activate(ad->popup_mw);
208 #endif
209                 }
210
211                 markup_text = evas_textblock_text_utf8_to_markup(NULL, popup_msg);
212                 if (markup_text) {
213                         elm_object_text_set(ad->popup_eo, markup_text);
214                         elm_popup_timeout_set(ad->popup_eo, time_out);
215                         if (bterminate == 0) {
216                                 evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad);
217                         } else {
218                                 evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad);
219                         }
220                         evas_object_show(ad->popup_eo);
221                         free(markup_text);
222                         markup_text = NULL;
223                 } else {
224                         evas_object_del(ad->popup_eo);
225                         ad->popup_eo = NULL;
226                         __vcui_view_popup_win_del(ad);
227                         return;
228                 }
229         }
230 }
231
232 void _vcui_view_popup_load_reject_call(char *name, char *number, int end_app)
233 {
234         CALL_UI_DEBUG("..");
235         char msg[DEF_BUF_LEN_LONG] = { 0, };
236
237         if (strlen(name) == 0) {
238                 snprintf(msg, sizeof(msg), "%s\n%s", number, _("IDS_CALL_POP_REJECTED"));
239         } else if (strlen(number) == 0) {
240                 snprintf(msg, sizeof(msg), "%s\n%s", name, _("IDS_CALL_POP_REJECTED"));
241         } else {
242                 snprintf(msg, sizeof(msg), "%s\n%s\n%s", name, number, _("IDS_CALL_POP_REJECTED"));
243         }
244
245         _vcui_view_popup_load(msg, POPUP_TIMEOUT_LONG, end_app);
246
247 }
248
249 void _vcui_view_popup_load_endcall_time(call_data_t *cd)
250 {
251         unsigned long sec = 0;
252         unsigned long min = 0;
253         unsigned long hr = 0;
254         unsigned long call_duration_in_sec = _vcui_get_diff_now(_vcui_doc_get_call_start_time(cd));
255         char buf[DEF_BUF_LEN] = { 0, };
256         char msg[DEF_BUF_LEN_LONG] = { 0, };
257
258         sec = call_duration_in_sec % 60;
259         min = (call_duration_in_sec / 60) % 60;
260         hr = call_duration_in_sec / 3600;
261         snprintf(buf, sizeof(buf), "%c%c:%c%c:%c%c", (int)((hr / 10) + '0'), (int)((hr % 10) + '0'), (int)((min / 10) + '0'), (int)((min % 10) + '0'), (int)((sec / 10) + '0'), (int)((sec % 10) + '0'));
262
263         snprintf(msg, sizeof(msg), "%s\n%s\n%s", _vcui_doc_get_call_display_name(cd), _vcui_doc_get_call_number(cd), buf);
264
265         _vcui_view_popup_load(msg, POPUP_TIMEOUT_SHORT, EINA_FALSE);
266 }
267
268 void _vcui_view_popup_load_redial(void)
269 {
270         _vcui_view_popup_load(_("IDS_CALL_POP_REDIALLING"), POPUP_TIMEOUT_NORMAL, EINA_FALSE);
271 }
272
273 static Eina_Bool __vcui_view_popup_timer_cb_vol_ringtone(void *data)
274 {
275         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
276
277         __vcui_view_popup_response_cb_vol_ringtone(ad, ad->vol_ringtone_popup_eo, NULL);
278
279         return ECORE_CALLBACK_CANCEL;
280 }
281
282 static void __vcui_view_popup_vol_update_icon(int volume_level)
283 {
284         CALL_UI_DEBUG("...");
285         vcui_app_call_data_t *ad = _vcui_get_app_data();
286         Evas_Object *icon = NULL;
287
288         icon = edje_object_part_swallow_get(_EDJ(ad->popup_vol_ly), "volume_icon");
289         if (icon) {
290                 edje_object_part_unswallow(_EDJ(ad->popup_vol_ly), icon);
291                 evas_object_del(icon);
292         }
293
294         icon = elm_image_add(ad->popup_vol_ly);
295         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
296         elm_image_resizable_set(icon, 0, 0);
297         elm_object_part_content_set(ad->popup_vol_ly, "volume_icon", icon);
298         if (volume_level == 0)
299                 elm_image_file_set(icon, VOLUME_MUTE_ICON, NULL);
300         else
301                 elm_image_file_set(icon, VOLUME_ICON, NULL);
302 }
303
304 static void __vcui_view_popup_vol_ringtone_changed_cb(void *data, Evas_Object *obj, void *event_info)
305 {
306         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
307         double value;
308
309         value = elm_slider_value_get(obj);
310         if (value > RINGTONE_MAX)
311                 value = RINGTONE_MAX;
312         else if (value < RINGTONE_MIN)
313                 value = RINGTONE_MIN;
314
315         ad->ringtone_val = (int)value;
316
317         vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_RINGTONE, ad->ringtone_val);
318
319         elm_slider_value_set(obj, ad->ringtone_val);
320         if (ad->vol_ringtone_popup_del_timer) {
321                 ecore_timer_del(ad->vol_ringtone_popup_del_timer);
322                 ad->vol_ringtone_popup_del_timer = NULL;
323         }
324
325         CALL_UI_DEBUG("ad->ringtone_val %d...", ad->ringtone_val);
326         __vcui_view_popup_vol_update_icon(ad->ringtone_val);
327         ad->vol_ringtone_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_ringtone, ad);
328 }
329
330 static void __vcui_view_popup_response_cb_vol_ringtone(void *data, Evas_Object *obj, void *event_info)
331 {
332         CALL_UI_DEBUG("..");
333         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
334
335         if (ad->vol_ringtone_popup_eo) {
336                 CALL_UI_DEBUG("vol_ringtone_popup_eo delete.");
337                 evas_object_del(ad->vol_ringtone_popup_eo);
338                 ad->vol_ringtone_popup_eo = NULL;
339         }
340
341         ad->vol_longpress_cnt = 0;
342
343         if (ad->volup_key_longpress_timer) {
344                 ecore_timer_del(ad->volup_key_longpress_timer);
345                 ad->volup_key_longpress_timer = NULL;
346         }
347
348         if (ad->voldown_key_longpress_timer) {
349                 ecore_timer_del(ad->voldown_key_longpress_timer);
350                 ad->voldown_key_longpress_timer = NULL;
351         }
352
353         if (ad->vol_ringtone_popup_del_timer) {
354                 ecore_timer_del(ad->vol_ringtone_popup_del_timer);
355                 ad->vol_ringtone_popup_del_timer = NULL;
356         }
357
358         _vcui_cache_flush();
359         __vcui_view_popup_win_del(ad);
360         return;
361 }
362
363 void _vcui_view_popup_vol_ringtone(int vol_level)
364 {
365         CALL_UI_DEBUG("vol_level(%d)", vol_level);
366         vcui_app_call_data_t *ad = _vcui_get_app_data();
367         Evas_Object *popup = NULL;
368         Evas_Object *slider = NULL;
369
370         if (ad->vol_ringtone_popup_eo) {
371                 __vcui_view_popup_vol_update_icon(vol_level);
372                 elm_slider_value_set(ad->vol_ringtone_slider_eo, vol_level);
373                 if (ad->vol_ringtone_popup_del_timer) {
374                         ecore_timer_del(ad->vol_ringtone_popup_del_timer);
375                         ad->vol_ringtone_popup_del_timer = NULL;
376                 }
377                 ad->vol_ringtone_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_ringtone, ad);
378         } else {
379 #ifdef  CALL_MW
380                 popup = elm_popup_add(ad->win_main);
381 #else
382                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
383                 ad->vol_ringtone_popup_eo = popup = elm_popup_add(ad->popup_mw);
384 #endif
385                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
386                 elm_object_part_text_set(popup, "title,text", dgettext("sys_string", "IDS_COM_BODY_RINGTONE"));
387
388                 ad->popup_vol_ly = _vcui_load_edj(popup, EDJ_NAME, "volume");
389                 if (ad->popup_vol_ly == NULL) {
390                         if (ad->vol_ringtone_popup_eo) {
391                                 CALL_UI_DEBUG("vol_ringtone_popup_eo delete.");
392                                 evas_object_del(ad->vol_ringtone_popup_eo);
393                                 ad->vol_ringtone_popup_eo = NULL;
394                         }
395                         __vcui_view_popup_win_del(ad);
396                         return;
397                 }
398                 elm_object_content_set(popup, ad->popup_vol_ly);
399                 __vcui_view_popup_vol_update_icon(vol_level);
400
401                 slider = elm_slider_add(popup);
402                 elm_slider_horizontal_set(slider, EINA_TRUE);
403                 elm_slider_indicator_show_set(slider, EINA_TRUE);
404                 elm_slider_indicator_format_set(slider, "%.0f");
405                 elm_object_part_content_set(ad->popup_vol_ly, "volume_slider", slider);
406                 elm_slider_min_max_set(slider, 0, 15);
407                 elm_slider_value_set(slider, vol_level);
408                 evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_ringtone_changed_cb, ad);
409                 ad->vol_ringtone_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_ringtone, ad);
410                 evas_object_smart_callback_add(popup, "block,clicked", __vcui_view_popup_response_cb_vol_ringtone, ad);
411
412                 ad->vol_ringtone_slider_eo = slider;
413                 evas_object_show(popup);
414         }
415
416 }
417
418 static Eina_Bool __vcui_view_popup_timer_cb_vol_voice(void *data)
419 {
420         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
421
422         __vcui_view_popup_response_cb_vol_voice(ad, ad->vol_voice_popup_eo, NULL);
423
424         return ECORE_CALLBACK_CANCEL;
425 }
426
427 static void __vcui_view_popup_vol_voice_changed_cb(void *data, Evas_Object *obj, void *event_info)
428 {
429         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
430         double value;
431
432         value = elm_slider_value_get(obj);
433         if (value > VOICE_VOL_MAX)
434                 value = VOICE_VOL_MAX;
435         else if (value < VOICE_VOL_MIN)
436                 value = VOICE_VOL_MIN;
437         ad->voice_vol_val = (int)value;
438
439         vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_VOICE, ad->voice_vol_val);
440
441         elm_slider_value_set(obj, ad->voice_vol_val);
442         if (ad->vol_voice_popup_del_timer) {
443                 ecore_timer_del(ad->vol_voice_popup_del_timer);
444                 ad->vol_voice_popup_del_timer = NULL;
445         }
446         ad->vol_voice_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_voice, ad);
447 }
448
449 static void __vcui_view_popup_response_cb_vol_voice(void *data, Evas_Object *obj, void *event_info)
450 {
451         CALL_UI_DEBUG("..");
452         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
453
454         if (ad->vol_voice_popup_eo) {
455                 CALL_UI_DEBUG("vol_voice_popup_eo delete.");
456                 evas_object_del(ad->vol_voice_popup_eo);
457                 ad->vol_voice_popup_eo = NULL;
458         }
459
460         ad->vol_longpress_cnt = 0;
461
462         if (ad->volup_key_longpress_timer) {
463                 ecore_timer_del(ad->volup_key_longpress_timer);
464                 ad->volup_key_longpress_timer = NULL;
465         }
466
467         if (ad->voldown_key_longpress_timer) {
468                 ecore_timer_del(ad->voldown_key_longpress_timer);
469                 ad->voldown_key_longpress_timer = NULL;
470         }
471
472         if (ad->vol_voice_popup_del_timer) {
473                 ecore_timer_del(ad->vol_voice_popup_del_timer);
474                 ad->vol_voice_popup_del_timer = NULL;
475         }
476
477         _vcui_cache_flush();
478         __vcui_view_popup_win_del(ad);
479         return;
480 }
481
482 void _vcui_view_popup_vol_voice(int vol_level)
483 {
484         vcui_app_call_data_t *ad = _vcui_get_app_data();
485         Evas_Object *popup = NULL;
486         Evas_Object *slider = NULL;
487
488         if (ad->vol_voice_popup_eo) {
489                 elm_slider_value_set(ad->vol_voice_slider_eo, vol_level);
490                 if (ad->vol_voice_popup_del_timer) {
491                         ecore_timer_del(ad->vol_voice_popup_del_timer);
492                         ad->vol_voice_popup_del_timer = NULL;
493                 }
494                 ad->vol_voice_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_voice, ad);
495         } else {
496 #ifdef  CALL_MW
497                 popup = elm_popup_add(ad->win_main);
498 #else
499                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
500                 popup = elm_popup_add(ad->popup_mw);
501 #endif
502                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
503                 elm_object_part_text_set(popup, "title,text", _("IDS_CALL_BODY_CALL"));
504
505                 ad->popup_vol_ly = _vcui_load_edj(popup, EDJ_NAME, "volume");
506                 if (ad->popup_vol_ly == NULL) {
507                         if (popup) {
508                                 CALL_UI_DEBUG("popup delete.");
509                                 evas_object_del(popup);
510                                 popup = NULL;
511                         }
512                         __vcui_view_popup_win_del(ad);
513                         return;
514                 }
515                 elm_object_content_set(popup, ad->popup_vol_ly);
516                 __vcui_view_popup_vol_update_icon(vol_level);
517
518                 slider = elm_slider_add(ad->popup_vol_ly);
519                 elm_slider_horizontal_set(slider, EINA_TRUE);
520                 elm_slider_indicator_show_set(slider, EINA_TRUE);
521                 elm_slider_indicator_format_set(slider, "%.0f");
522                 elm_object_part_content_set(ad->popup_vol_ly, "volume_slider", slider);
523                 elm_slider_min_max_set(slider, 0, 7);
524                 elm_slider_value_set(slider, vol_level);
525                 evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_voice_changed_cb, ad);
526                 ad->vol_voice_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_voice, ad);
527                 evas_object_smart_callback_add(popup, "block,clicked", __vcui_view_popup_response_cb_vol_voice, ad);
528
529                 ad->vol_voice_slider_eo = slider;
530                 ad->vol_voice_popup_eo = popup;
531                 evas_object_show(popup);
532         }
533 }
534
535 static Eina_Bool __vcui_view_popup_timer_cb_vol_bt(void *data)
536 {
537         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
538
539         __vcui_view_popup_response_cb_vol_bt(ad, ad->vol_bt_popup_eo, NULL);
540
541         return ECORE_CALLBACK_CANCEL;
542 }
543
544 static void __vcui_view_popup_vol_bt_changed_cb(void *data, Evas_Object *obj, void *event_info)
545 {
546         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
547         double value;
548
549         value = elm_slider_value_get(obj);
550         if (value > BT_VOL_MAX)
551                 value = BT_VOL_MAX;
552         else if (value < BT_VOL_MIN)
553                 value = BT_VOL_MIN;
554
555         ad->bt_vol_val = (int)value;
556
557         vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_HEADSET, ad->bt_vol_val);
558
559         elm_slider_value_set(obj, ad->bt_vol_val);
560         if (ad->vol_bt_popup_del_timer) {
561                 ecore_timer_del(ad->vol_bt_popup_del_timer);
562                 ad->vol_bt_popup_del_timer = NULL;
563         }
564         ad->vol_bt_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_bt, ad);
565 }
566
567 static void __vcui_view_popup_response_cb_vol_bt(void *data, Evas_Object *obj, void *event_info)
568 {
569         CALL_UI_DEBUG("..");
570         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
571
572         if (ad->vol_bt_popup_eo) {
573                 CALL_UI_DEBUG("vol_bt_popup_eo delete.");
574                 evas_object_del(ad->vol_bt_popup_eo);
575                 ad->vol_bt_popup_eo = NULL;
576                 __vcui_view_popup_win_del(ad);
577         }
578
579         ad->vol_longpress_cnt = 0;
580
581         if (ad->volup_key_longpress_timer) {
582                 ecore_timer_del(ad->volup_key_longpress_timer);
583                 ad->volup_key_longpress_timer = NULL;
584         }
585
586         if (ad->voldown_key_longpress_timer) {
587                 ecore_timer_del(ad->voldown_key_longpress_timer);
588                 ad->voldown_key_longpress_timer = NULL;
589         }
590
591         if (ad->vol_bt_popup_del_timer) {
592                 ecore_timer_del(ad->vol_bt_popup_del_timer);
593                 ad->vol_bt_popup_del_timer = NULL;
594         }
595
596         _vcui_cache_flush();
597         __vcui_view_popup_win_del(ad);
598         return;
599 }
600
601 void _vcui_view_popup_vol_bt(int vol_level)
602 {
603         vcui_app_call_data_t *ad = _vcui_get_app_data();
604         Evas_Object *popup = NULL;
605         Evas_Object *slider = NULL;
606
607         if (ad->vol_bt_popup_eo) {
608                 elm_slider_value_set(ad->vol_bt_slider_eo, vol_level);
609                 if (ad->vol_bt_popup_del_timer) {
610                         ecore_timer_del(ad->vol_bt_popup_del_timer);
611                         ad->vol_bt_popup_del_timer = NULL;
612                 }
613                 ad->vol_bt_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_bt, ad);
614         } else {
615 #ifdef  CALL_MW
616                 popup = elm_popup_add(ad->win_main);
617 #else
618                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
619                 popup = elm_popup_add(ad->popup_mw);
620 #endif
621                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
622                 elm_object_part_text_set(popup, "title,text", _("IDS_CALL_BUTTON_HEADSET"));
623
624                 ad->popup_vol_ly = _vcui_load_edj(popup, EDJ_NAME, "volume");
625                 if (ad->popup_vol_ly == NULL) {
626                         if (popup) {
627                                 CALL_UI_DEBUG("popup delete.");
628                                 evas_object_del(popup);
629                                 popup = NULL;
630                         }
631                         __vcui_view_popup_win_del(ad);
632                         return;
633                 }
634                 elm_object_content_set(popup, ad->popup_vol_ly);
635                 __vcui_view_popup_vol_update_icon(vol_level);
636
637                 slider = elm_slider_add(popup);
638                 elm_slider_horizontal_set(slider, EINA_TRUE);
639                 elm_slider_indicator_show_set(slider, EINA_TRUE);
640                 elm_slider_indicator_format_set(slider, "%.0f");
641                 elm_object_part_content_set(ad->popup_vol_ly, "volume_slider", slider);
642                 elm_slider_min_max_set(slider, 0, 15);
643                 elm_slider_value_set(slider, vol_level);
644                 evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_bt_changed_cb, ad);
645                 ad->vol_bt_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_bt, ad);
646                 evas_object_smart_callback_add(popup, "block,clicked", __vcui_view_popup_response_cb_vol_bt, ad);
647
648                 ad->vol_bt_slider_eo = slider;
649                 ad->vol_bt_popup_eo = popup;
650                 evas_object_show(popup);
651         }
652
653 }
654
655 static Eina_Bool __vcui_view_popup_response_cb_delay(void *data)
656 {
657         CALL_UI_DEBUG("..");
658
659         _vcui_view_popup_load((char *)data, POPUP_TIMEOUT_SHORT, EINA_FALSE);
660
661         vcui_app_call_data_t *ad = _vcui_get_app_data();
662         ecore_timer_del(ad->popup_delay);
663         ad->popup_delay = NULL;
664
665         CALL_UI_DEBUG("delay popup work");
666         return EINA_FALSE;
667 }
668
669 void _vcui_view_popup_load_with_delay(char *popup_msg, double delay_time)
670 {
671         CALL_UI_DEBUG("..");
672         vcui_app_call_data_t *ad = _vcui_get_app_data();
673
674         ad->popup_delay = ecore_timer_add(delay_time, __vcui_view_popup_response_cb_delay, popup_msg);
675         CALL_UI_DEBUG("delay popup");
676 }
677
678 void _vcui_view_popup_unload_progress(vcui_app_call_data_t *ad)
679 {
680         CALL_UI_DEBUG("..");
681
682         if (ad->popup_progress_eo) {
683                 evas_object_hide(ad->popup_progress_eo);
684                 evas_object_del(ad->popup_progress_eo);
685                 ad->popup_progress_eo = NULL;
686         }
687         __vcui_view_popup_win_del(ad);
688
689         _vcui_cache_flush();
690
691         return;
692 }
693
694 static void __vcui_view_popup_progressbar_set_label(char *status_string)
695 {
696         CALL_UI_DEBUG("..");
697         Evas_Object *label;
698         vcui_app_call_data_t *ad = _vcui_get_app_data();
699         CALL_UI_DEBUG("popup_progress_set_label ...");
700
701         label = (Evas_Object *)evas_object_data_get(ad->popup_progress_eo, "progress_label");
702         elm_object_text_set(label, status_string);
703 }
704
705 static void __vcui_view_popup_progressbar_response_cb(void *data, Evas_Object *obj, void *event_info)
706 {
707         vcui_app_call_data_t *ad = _vcui_get_app_data();
708         CALL_UI_DEBUG("__vcui_view_popup_progressbar_response_cb callback=%d", (int)event_info);
709
710         if (ad->popup_progress_eo) {
711                 evas_object_del(ad->popup_progress_eo);
712                 ad->popup_progress_eo = NULL;
713         }
714
715         evas_object_del(obj);
716         __vcui_view_popup_win_del(ad);
717 }
718
719 void _vcui_view_popup_load_progress(char *display_string)
720 {
721         CALL_UI_DEBUG("..");
722         Evas_Object *progressbar_eo;
723         Evas_Object *box, *label;
724         vcui_app_call_data_t *ad = _vcui_get_app_data();
725
726         if (NULL != ad->popup_progress_eo) {
727                 __vcui_view_popup_progressbar_set_label(display_string);
728                 return;
729         }
730 #ifdef  CALL_MW
731         ad->popup_progress_eo = elm_popup_add(ad->win_main);
732 #else
733         ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
734         ad->popup_progress_eo = elm_popup_add(ad->popup_mw);
735 #endif
736
737         label = elm_label_add(ad->popup_progress_eo);
738         elm_object_text_set(label, display_string);
739         evas_object_show(label);
740         box = elm_box_add(ad->popup_progress_eo);
741         progressbar_eo = elm_progressbar_add(ad->popup_progress_eo);
742         elm_object_style_set(progressbar_eo, "list_progress");
743         elm_progressbar_pulse(progressbar_eo, EINA_TRUE);
744         evas_object_size_hint_align_set(progressbar_eo, EVAS_HINT_FILL, 0.5);
745         evas_object_size_hint_weight_set(progressbar_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
746         elm_progressbar_pulse(progressbar_eo, EINA_TRUE);
747         evas_object_show(progressbar_eo);
748         elm_box_pack_end(box, label);
749         elm_box_pack_end(box, progressbar_eo);
750         evas_object_show(box);
751         elm_object_content_set(ad->popup_progress_eo, box);
752         evas_object_smart_callback_add(ad->popup_progress_eo, "timeout", __vcui_view_popup_progressbar_response_cb, NULL);
753         evas_object_show(ad->popup_progress_eo);
754
755         evas_object_data_set(ad->popup_progress_eo, "progress_label", (void *)label);
756 }
757
758 void _vcui_view_popup_load_sending_dtmf(char *status_string, char *dtmf_num)
759 {
760         CALL_UI_DEBUG("..");
761         char msg[DEF_BUF_LEN_LONG] = { 0, };
762
763         snprintf(msg, DEF_BUF_LEN_LONG, "%s\n%s", status_string, dtmf_num);
764
765         _vcui_view_popup_load_progress(msg);
766 }
767
768 static void __vcui_view_popup_snd_path_bt_cb(void *data, Evas_Object *obj, void *event_info)
769 {
770         CALL_UI_DEBUG("..");
771         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
772
773         elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_HEADSET);
774
775         vcall_engine_change_sound_path(VCALL_ENGINE_AUDIO_HEADSET);
776
777         ad->speaker_status = EINA_FALSE;
778         ad->headset_status = EINA_TRUE;
779 }
780
781 static void __vcui_view_popup_snd_path_earjack_cb(void *data, Evas_Object *obj, void *event_info)
782 {
783         CALL_UI_DEBUG("..");
784         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
785
786         elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_RECEIVER_EARJACK);
787
788         vcall_engine_change_sound_path(VCALL_ENGINE_AUDIO_RECEIVER_EARJACK);
789
790         ad->speaker_status = EINA_FALSE;
791         ad->headset_status = EINA_FALSE;
792 }
793
794 static void __vcui_view_popup_snd_path_speaker_cb(void *data, Evas_Object *obj, void *event_info)
795 {
796         CALL_UI_DEBUG("..");
797         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
798
799         elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_SPEAKER);
800
801         vcall_engine_change_sound_path(VCALL_ENGINE_AUDIO_SPEAKER);
802
803         ad->speaker_status = EINA_TRUE;
804         ad->headset_status = EINA_FALSE;
805 }
806
807 static void __vcui_view_popup_hide_snd_path_cb(void *data, Evas_Object *obj, void *event_info)
808 {
809         CALL_UI_DEBUG("..");
810         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
811
812         if (ad->ctxpopup_eo) {
813                 evas_object_del(ad->ctxpopup_eo);
814                 ad->ctxpopup_eo = NULL;
815         }
816 }
817
818 static void __vcui_view_popup_move_snd_path(Evas_Object *ctxpopup, Evas_Object *layout, Evas_Coord touch_x, Evas_Coord touch_y)
819 {
820         evas_object_move(ctxpopup, touch_x, touch_y);
821 }
822
823 void _vcui_view_popup_load_snd_path(void *data)
824 {
825         CALL_UI_DEBUG("..");
826         vcui_app_call_data_t *ad = _vcui_get_app_data();
827         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
828         int bearjack_status = EINA_FALSE;
829
830         Evas_Object *ctxpopup = NULL;
831         Evas_Object *radio = NULL;
832         Evas_Object *group = NULL;
833
834         int status = -1;
835         char *bt_name = NULL;
836         int snd_path;
837
838         /* get bt name */
839         bt_name = vconf_get_str(VCONFKEY_BT_HEADSET_NAME);
840         if (!bt_name) {
841                 bt_name = _("IDS_CALL_BUTTON_HEADSET");
842         }
843
844         /* check earjack status */
845         if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &status)) {
846                 if (status != VCONFKEY_SYSMAN_EARJACK_REMOVED) {
847                         bearjack_status = EINA_TRUE;
848                 }
849         }
850
851         if (ad->ctxpopup_eo) {
852                 evas_object_del(ad->ctxpopup_eo);
853                 ad->ctxpopup_eo = NULL;
854         }
855
856         ctxpopup = elm_ctxpopup_add(vd->layout);
857
858         evas_object_smart_callback_add(ctxpopup, "dismissed", __vcui_view_popup_hide_snd_path_cb, ad);
859
860         __vcui_view_popup_move_snd_path(ctxpopup, vd->layout, ad->touch_x, ad->touch_y);
861
862         /* bt headset */
863         group = radio = elm_radio_add(ctxpopup);
864         elm_radio_state_value_set(radio, VCUI_SND_PATH_HEADSET);
865         evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_HEADSET));
866         evas_object_show(radio);
867         elm_ctxpopup_item_append(ctxpopup, bt_name, radio, __vcui_view_popup_snd_path_bt_cb, ad);
868
869         /* earjack or receiver */
870         radio = elm_radio_add(ctxpopup);
871         elm_radio_state_value_set(radio, VCUI_SND_PATH_RECEIVER_EARJACK);
872         elm_radio_group_add(radio, group);
873         evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_RECEIVER_EARJACK));
874         evas_object_show(radio);
875         if (bearjack_status) {
876                 elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_HEADPHONES"), radio, __vcui_view_popup_snd_path_earjack_cb, ad);
877         } else {
878                 elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_RECEIVER"), radio, __vcui_view_popup_snd_path_earjack_cb, ad);
879         }
880
881         /* speaker */
882         radio = elm_radio_add(ctxpopup);
883         elm_radio_state_value_set(radio, VCUI_SND_PATH_SPEAKER);
884         elm_radio_group_add(radio, group);
885         evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_SPEAKER));
886         evas_object_show(radio);
887         elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_SPEAKER"), radio, __vcui_view_popup_snd_path_speaker_cb, ad);
888         /* current sound path set */
889         vcall_engine_get_sound_path(&snd_path);
890         switch (snd_path) {
891         case VCALL_ENGINE_AUDIO_SPEAKER:
892                 {
893                         elm_radio_value_set(group, VCUI_SND_PATH_SPEAKER);
894                 }
895                 break;
896         case VCALL_ENGINE_AUDIO_HEADSET:
897                 {
898                         elm_radio_value_set(group, VCUI_SND_PATH_HEADSET);
899                 }
900                 break;
901         case VCALL_ENGINE_AUDIO_RECEIVER_EARJACK:
902                 {
903                         elm_radio_value_set(group, VCUI_SND_PATH_RECEIVER_EARJACK);
904                 }
905                 break;
906         default:
907                 CALL_UI_DEBUG("ERROR - wrong type:[%d]", snd_path);
908                 return;
909                 break;
910         }
911
912         evas_object_show(ctxpopup);
913
914         ad->ctxpopup_eo = ctxpopup;
915         ad->ctxpopup_radio_group_eo = group;
916 }
917
918 #if 0
919 static Eina_Bool __vcui_view_ticker_response_cb(void *data)
920 {
921         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
922         CALL_UI_DEBUG("..");
923
924         if (ad->ticker_tm) {
925                 ecore_timer_del(ad->ticker_tm);
926                 ad->ticker_tm = NULL;
927         }
928
929         /* to be implemented */
930
931         return ECORE_CALLBACK_CANCEL;
932 }
933
934 void _vcui_view_create_ticker_noti(char *ticker_msg)
935 {
936         Evas_Object *ticker_noti = NULL;
937         vcui_app_call_data_t *ad = _vcui_get_app_data();
938
939         CALL_UI_DEBUG("load_ticker_noti_at_bottom enter");
940
941         ticker_noti = elm_tickernoti_add(NULL);
942         elm_object_style_set(ticker_noti, "info");
943         elm_object_text_set(ticker_noti, ticker_msg);
944         elm_tickernoti_orient_set(ticker_noti, ELM_TICKERNOTI_ORIENT_BOTTOM);
945         elm_tickernoti_rotation_set(ticker_noti, ad->rotate_angle);
946         if (ad->ticker_tm) {
947                 ecore_timer_del(ad->ticker_tm);
948                 ad->ticker_tm = NULL;
949         }
950         ad->ticker_tm = ecore_timer_add(TICKER_TIMEOUT, __vcui_view_ticker_response_cb, ad);
951         evas_object_show(ticker_noti);
952
953         CALL_UI_DEBUG("load_ticker_noti_at_bottom over");
954 }
955 #endif
956
957 static Eina_Bool __vcui_view_send_dtmf_idler_cb(void *data)
958 {
959         CALL_UI_DEBUG("..");
960         gboolean bsuccess = TRUE;
961
962         if (strncmp(elm_object_text_get((Evas_Object *)data), "Send", 4) == 0) {
963                 bsuccess = TRUE;
964         } else if (strncmp(elm_object_text_get((Evas_Object *)data), "Cancel", 6) == 0) {
965                 bsuccess = FALSE;
966         }
967         CALL_UI_DEBUG("bsuccess %d", bsuccess);
968         vcall_engine_send_dtmf(bsuccess);
969
970         return EINA_FALSE;
971 }
972
973 static void __vcui_view_dtmf_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
974 {
975         CALL_UI_DEBUG("..");
976         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
977
978         ecore_idler_add((Ecore_Task_Cb) __vcui_view_send_dtmf_idler_cb, obj);
979         if (ad->popup_eo) {
980                 CALL_UI_DEBUG("popup eo delete.");
981                 evas_object_hide(ad->popup_eo);
982                 evas_object_del(ad->popup_eo);
983                 ad->popup_eo = NULL;
984         }
985         _vcui_cache_flush();
986         __vcui_view_popup_win_del(ad);
987         return;
988 }
989
990 void _vcui_view_load_send_dtmf_popup_with_buttons(char *status_string, char *dtmf_num)
991 {
992         vcui_app_call_data_t *ad = _vcui_get_app_data();
993         char popup_msg[DEF_BUF_LEN_LONG] = { 0, };
994         Evas_Object *btn1 = NULL;
995         Evas_Object *btn2 = NULL;
996
997         snprintf(popup_msg, DEF_BUF_LEN_LONG, "%s\n%s", status_string, dtmf_num);
998         CALL_UI_DEBUG("msg:[%s]", popup_msg);
999
1000         _vcui_view_popup_unload_progress(ad);
1001         _vcui_view_popup_unload(ad->popup_eo);
1002
1003         ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
1004         ad->popup_eo = elm_popup_add(ad->popup_mw);
1005         evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1006         elm_object_text_set(ad->popup_eo, popup_msg);
1007         btn1 = elm_button_add(ad->popup_eo);
1008         elm_object_text_set(btn1, "Send");
1009         elm_object_part_content_set(ad->popup_eo, "button1", btn1);
1010         evas_object_smart_callback_add(btn1, "clicked", __vcui_view_dtmf_popup_response_cb, ad);
1011         btn2 = elm_button_add(ad->popup_eo);
1012         elm_object_text_set(btn2, "Cancel");
1013         elm_object_part_content_set(ad->popup_eo, "button2", btn2);
1014         evas_object_smart_callback_add(btn2, "clicked", __vcui_view_dtmf_popup_response_cb, ad);
1015         evas_object_show(ad->popup_eo);
1016 }
1017
1018 void _vcui_view_popup_second_mtcall_unload(void *data)
1019 {
1020         CALL_UI_DEBUG("..");
1021         vcui_app_call_data_t *ad = _vcui_get_app_data();
1022         _second_mtcall_popup_data_t *p_popup_data = (_second_mtcall_popup_data_t *) data;
1023         int iter = 0;
1024
1025         if (p_popup_data != NULL) {
1026
1027                 while (iter < 3) {
1028                         if (p_popup_data->text_buffer[iter] != NULL) {
1029                                 CALL_UI_DEBUG("Free the string %d buffer", iter);
1030                                 free(p_popup_data->text_buffer[iter]);
1031                                 p_popup_data->text_buffer[iter] = NULL;
1032                         }
1033                         iter++;
1034                 }
1035
1036                 if (p_popup_data->itc_option_list != NULL) {
1037                         elm_genlist_item_class_free(p_popup_data->itc_option_list);
1038                         p_popup_data->itc_option_list = NULL;
1039                 }
1040
1041                 free(p_popup_data);
1042                 p_popup_data = NULL;
1043
1044                 _vcui_view_set_second_mtcall_popup_data(NULL);
1045         }
1046
1047         _vcui_view_popup_unload(ad->popup_eo);
1048 }
1049
1050 static char *__second_mtcall_option_list_gl_label_get_option(void *data, Evas_Object *obj, const char *part)
1051 {
1052         VCUI_RETURN_NULL_IF_FAIL(part != NULL);
1053         CALL_UI_DEBUG("..");
1054         _second_mtcall_popup_data_t *p_popup_data = (_second_mtcall_popup_data_t *) _vcui_view_get_second_mtcall_popup_data();
1055         char *list_text = NULL;
1056
1057         list_text = p_popup_data->text_buffer[(int) data];
1058         CALL_UI_DEBUG("list_text: %s", list_text);
1059
1060         if (strcmp(part, "elm.text") == 0) {
1061                 CALL_UI_DEBUG("..");
1062                 if (list_text != NULL) {
1063                         return strdup(list_text);
1064                 } else {
1065                         return NULL;
1066                 }
1067         }
1068
1069         return NULL;
1070 }
1071
1072 static void __second_mtcall_option_list_gl_sel_option(void *data, Evas_Object *obj, void *event_info)
1073 {
1074         CALL_UI_DEBUG("..");
1075         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1076         int index = -1;
1077         int unhold_call_count = 0;
1078         int hold_call_count = 0;
1079
1080         if (item != NULL) {
1081
1082                 index = (int) elm_object_item_data_get(item);
1083                 CALL_UI_DEBUG("index: %d", index);
1084
1085                 unhold_call_count = _vcui_doc_get_unhold_call_data_count();
1086                 hold_call_count = _vcui_doc_get_hold_call_data_count();
1087
1088                 if ((unhold_call_count >= 1) && (hold_call_count == 0)) {
1089                         CALL_UI_DEBUG("1 active call OR 1 active conference call");
1090                         if (index == 0) {
1091                                 vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_HOLD_ACTIVE_AND_ACCEPT);
1092                         } else if (index == 1) {
1093                                 vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_ACTIVE_AND_ACCEPT);
1094                         } else {
1095                                 CALL_UI_DEBUG("Wrong index.. Should never get here");
1096                         }
1097                 } else if ((unhold_call_count == 1 && hold_call_count == 1) || (unhold_call_count > 1 && hold_call_count == 1) || \
1098                                 (unhold_call_count == 1 && hold_call_count > 1)) {
1099                         CALL_UI_DEBUG("1 active call + 1 held call OR 1 active conf call + 1 held call OR 1 active call + 1 held conf call");
1100                         if (index == 0) {
1101                                 vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_ACTIVE_AND_ACCEPT);
1102                         } else if (index == 1) {
1103                                 vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_HOLD_AND_ACCEPT);
1104                         } else if (index == 2) {
1105                                 vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_ALL_AND_ACCEPT);
1106                         } else {
1107                                 CALL_UI_DEBUG("Wrong index.. Should never get here");
1108                         }
1109                 }
1110         }
1111 }
1112
1113 static void __second_mtcall_cancel_btn_response_cb(void *data, Evas_Object *obj, void *event_info)
1114 {
1115         CALL_UI_DEBUG("..");
1116
1117         _vcui_view_popup_second_mtcall_unload(data);
1118
1119         _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, -1, NULL, NULL);
1120
1121         return;
1122 }
1123
1124 void _vcui_view_popup_second_mtcall_load(char *title_text, int unhold_call_count, int hold_call_count)
1125 {
1126         CALL_UI_DEBUG("..");
1127         vcui_app_call_data_t *ad = _vcui_get_app_data();
1128         _second_mtcall_popup_data_t *popup_data = NULL;
1129         Evas_Object *box = NULL;
1130
1131         call_data_t *hold_call_data = NULL;
1132         call_data_t *unhold_call_data = NULL;
1133         char *hold_call_number = NULL;
1134         char *hold_call_name = NULL;
1135         char *unhold_call_number = NULL;
1136         char *unhold_call_name = NULL;
1137         char *temp_str = NULL;
1138
1139         int iter = 0;
1140
1141         hold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_HOLD);
1142         unhold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_UNHOLD);
1143
1144         if (unhold_call_data == NULL) {
1145                 CALL_UI_DEBUG("call data is null");
1146                 return;
1147         }
1148
1149         _vcui_view_popup_second_mtcall_unload(NULL);
1150
1151         ad->popup_eo = elm_popup_add(ad->win_main);
1152         evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1153         elm_object_style_set(ad->popup_eo, "min_menustyle");
1154         elm_object_part_text_set(ad->popup_eo, "title,text", title_text);
1155
1156         popup_data = (_second_mtcall_popup_data_t *) calloc(1, sizeof(_second_mtcall_popup_data_t));
1157         if (popup_data == NULL) {
1158                 CALL_UI_DEBUG("memory allocation failed for popup data.. return");
1159                 return;
1160         }
1161         _vcui_view_set_second_mtcall_popup_data(popup_data);
1162
1163         popup_data->itc_option_list = elm_genlist_item_class_new();
1164
1165         popup_data->itc_option_list->item_style = "1text";
1166         popup_data->itc_option_list->func.text_get = __second_mtcall_option_list_gl_label_get_option;
1167         popup_data->itc_option_list->func.content_get = NULL;
1168         popup_data->itc_option_list->func.state_get = NULL;
1169         popup_data->itc_option_list->func.del = NULL;
1170
1171         box = elm_box_add(ad->popup_eo);
1172
1173         popup_data->glist = elm_genlist_add(box);
1174         evas_object_size_hint_weight_set(popup_data->glist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1175         evas_object_size_hint_align_set(popup_data->glist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1176
1177         for (iter = 0; iter < 3; iter++) {
1178                 popup_data->text_buffer[iter] = (char *) calloc(1, DEF_BUF_LEN);
1179                 memset(popup_data->text_buffer[iter], 0x00, DEF_BUF_LEN);
1180         }
1181
1182         CALL_UI_DEBUG("..");
1183         if (hold_call_data != NULL) {
1184                 hold_call_number = _vcui_doc_get_call_number(hold_call_data);
1185                 hold_call_name = _vcui_doc_get_call_display_name(hold_call_data);
1186                 if (strlen(hold_call_name) == 0)
1187                         hold_call_name = hold_call_number;
1188         }
1189
1190         if (unhold_call_data != NULL) {
1191                 unhold_call_number = _vcui_doc_get_call_number(unhold_call_data);
1192                 unhold_call_name = _vcui_doc_get_call_display_name(unhold_call_data);
1193                 if (strlen(unhold_call_name) == 0)
1194                         unhold_call_name = unhold_call_number;
1195         }
1196
1197         if ((unhold_call_count == 1) && (hold_call_count == 0)) {
1198                 CALL_UI_DEBUG("1 active call");
1199
1200                 iter = 0;
1201                 temp_str = _("IDS_CALL_BODY_PUTTING_PS_ON_HOLD");
1202                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name);
1203                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1204
1205                 iter++;
1206                 temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS");
1207                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name);
1208                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1209
1210         } else if ((unhold_call_count > 1) && (hold_call_count == 0)) {
1211                 CALL_UI_DEBUG("1 active conference call");
1212
1213                 iter = 0;
1214                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, "%s (%d)", _("IDS_CALL_BODY_HOLD_ACTIVE_CALL_ABB"), unhold_call_count);
1215                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1216
1217                 iter++;
1218                 temp_str = _("IDS_CALL_BODY_END_ACTIVE_CALLS_HPD");
1219                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_count);
1220                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1221
1222         } else if ((unhold_call_count == 1) && (hold_call_count == 1)) {
1223                 CALL_UI_DEBUG("1 active call + 1 held call");
1224
1225                 iter = 0;
1226                 temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS");
1227                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name);
1228                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1229
1230                 iter++;
1231                 temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS");
1232                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, hold_call_name);
1233                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1234
1235                 iter++;
1236                 strncpy(popup_data->text_buffer[iter], _("IDS_CALL_OPT_END_ALL_CALLS"), DEF_BUF_LEN - 1);
1237                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1238
1239         } else if ((unhold_call_count > 1) && (hold_call_count == 1)) {
1240                 CALL_UI_DEBUG("1 active conf call + 1 held call");
1241
1242                 iter = 0;
1243                 temp_str = _("IDS_CALL_BODY_END_ACTIVE_CALLS_HPD");
1244                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_count);
1245                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1246
1247                 iter++;
1248                 temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS");
1249                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, hold_call_name);
1250                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1251
1252                 iter++;
1253                 strncpy(popup_data->text_buffer[iter], _("IDS_CALL_OPT_END_ALL_CALLS"), DEF_BUF_LEN - 1);
1254                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1255
1256         } else if ((unhold_call_count == 1) && (hold_call_count > 1)) {
1257                 CALL_UI_DEBUG("1 active call + 1 held conf call");
1258
1259                 iter = 0;
1260                 temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS");
1261                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name);
1262                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1263
1264                 iter++;
1265                 temp_str = _("IDS_CALL_BODY_END_HELD_CALLS_HPD");
1266                 snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, hold_call_count);
1267                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1268
1269                 iter++;
1270                 strncpy(popup_data->text_buffer[iter], _("IDS_CALL_OPT_END_ALL_CALLS"), DEF_BUF_LEN - 1);
1271                 elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data);
1272         }
1273
1274         popup_data->btn = elm_button_add(ad->popup_eo);
1275         elm_object_text_set(popup_data->btn,  dgettext("sys_string", "IDS_COM_POP_CANCEL"));
1276         elm_object_part_content_set(ad->popup_eo, "button1", popup_data->btn);
1277         evas_object_smart_callback_add(popup_data->btn, "clicked", __second_mtcall_cancel_btn_response_cb, popup_data);
1278
1279         evas_object_size_hint_min_set(box, POPUP_LIST_HD_W * ad->scale_factor, ((POPUP_LIST_ITEM_HD_H * (iter + 1))) * ad->scale_factor);
1280         evas_object_show(popup_data->glist);
1281         elm_box_pack_end(box, popup_data->glist);
1282         elm_object_content_set(ad->popup_eo, box);
1283         evas_object_show(ad->popup_eo);
1284
1285 }
1286
1287 void _vcui_view_set_second_mtcall_popup_data(void *p_popup_data)
1288 {
1289         g_popup_data = (_second_mtcall_popup_data_t *) p_popup_data;
1290 }
1291
1292 void *_vcui_view_get_second_mtcall_popup_data(void)
1293 {
1294         return ((void *) g_popup_data);
1295 }
1296
1297 static void __vcui_view_popup_hide_more_option(void *data, Evas_Object *obj, void *event_info)
1298 {
1299         CALL_UI_DEBUG("..");
1300         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
1301
1302         if (ad->ctxpopup_eo) {
1303                 evas_object_del(ad->ctxpopup_eo);
1304                 ad->ctxpopup_eo = NULL;
1305         }
1306 }
1307
1308 static void __vcui_view_popup_move_more_option(Evas_Object *ctxpopup, Evas_Object *layout, Evas_Coord touch_x, Evas_Coord touch_y)
1309 {
1310         evas_object_move(ctxpopup, touch_x, touch_y);
1311 }
1312
1313 static void __vcui_view_popup_manage_conf_cb(void *data, Evas_Object *obj, void *event_info)
1314 {
1315         CALL_UI_DEBUG("..");
1316         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
1317         if (ad->ctxpopup_eo) {
1318                 evas_object_del(ad->ctxpopup_eo);
1319                 ad->ctxpopup_eo = NULL;
1320         }
1321
1322         _vcui_view_change(VIEW_INCALL_MULTICALL_LIST_VIEW, 0, 0, 0);
1323 }
1324
1325 void _vcui_view_popup_load_more_option(void *data)
1326 {
1327         CALL_UI_DEBUG("..");
1328         vcui_app_call_data_t *ad = _vcui_get_app_data();
1329         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
1330
1331         Evas_Object *ctxpopup = NULL;
1332         int hold_calls = _vcui_doc_get_hold_call_data_count();
1333         int active_calls = _vcui_doc_get_unhold_call_data_count();
1334         Evas_Object* icon = NULL;
1335
1336         if (ad->ctxpopup_eo) {
1337                 evas_object_del(ad->ctxpopup_eo);
1338                 ad->ctxpopup_eo = NULL;
1339         }
1340
1341         ctxpopup = elm_ctxpopup_add(vd->layout);
1342         elm_object_style_set(ctxpopup, "more_ctxpopup");
1343
1344         evas_object_smart_callback_add(ctxpopup, "dismissed", __vcui_view_popup_hide_more_option, ad);
1345
1346         if ((active_calls > 1)
1347                 || ((active_calls == 0) && (hold_calls > 1))) {
1348                 CALL_UI_DEBUG("Manage conference (active:%d, hold:%d)", active_calls, hold_calls);
1349                 icon = elm_image_add(ctxpopup);
1350                 elm_image_file_set(icon, MORE_MANAGE_CONF_ICON, NULL);
1351                 elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL"), icon, __vcui_view_popup_manage_conf_cb, ad);
1352         }
1353
1354         elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_LEFT,
1355                                                                                                 ELM_CTXPOPUP_DIRECTION_RIGHT, ELM_CTXPOPUP_DIRECTION_UP);
1356         __vcui_view_popup_move_more_option(ctxpopup, vd->layout, MORE_MENU_CTXPOPUP_X, MORE_MENU_CTXPOPUP_Y);
1357         evas_object_show(ctxpopup);
1358         ad->ctxpopup_eo = ctxpopup;
1359 }
1360