apply FSL(Flora Software License)
[apps/home/call.git] / ui / 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-engine-interface.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 static void __vcui_view_popup_response_cb_vol_voice(void *data, Evas_Object *obj, void *event_info);
30
31 static void __vcui_view_popup_win_del(void *data)
32 {
33         CALL_UI_DEBUG("..");
34         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
35
36         CALL_UI_DEBUG("delete the popup main_win - if created...");
37         if (ad->popup_mw != NULL) {
38                 CALL_UI_DEBUG("main_win is NOT null");
39                 evas_object_del(ad->popup_mw);
40                 ad->popup_mw = NULL;
41         }
42 }
43
44 void _vcui_view_popup_unload(Evas_Object *popup_eo)
45 {
46         CALL_UI_DEBUG("..");
47         vcui_app_call_data_t *ad = _vcui_get_app_data();
48
49         if (popup_eo) {
50                 evas_object_hide(popup_eo);
51                 evas_object_del(popup_eo);
52                 popup_eo = NULL;
53         }
54
55         __vcui_view_popup_win_del(ad);
56         _vcui_cache_flush();
57
58         return;
59 }
60
61 static void __vcui_view_popup_response_cb_terminate(void *data, Evas_Object *obj, void *event_info)
62 {
63         CALL_UI_DEBUG("..");
64         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
65
66         if (ad->popup_eo) {
67                 CALL_UI_DEBUG("popup eo delete.");
68                 evas_object_hide(ad->popup_eo);
69                 evas_object_del(ad->popup_eo);
70                 ad->popup_eo = NULL;
71         }
72         _vcui_cache_flush();
73         __vcui_view_popup_win_del(ad);
74
75         _vcui_view_common_call_terminate_or_view_change();
76
77         return;
78 }
79
80 static void __vcui_view_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
81 {
82         CALL_UI_DEBUG("..");
83         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
84
85         if (ad->popup_eo) {
86                 CALL_UI_DEBUG("popup eo delete.");
87                 evas_object_hide(ad->popup_eo);
88                 evas_object_del(ad->popup_eo);
89                 ad->popup_eo = NULL;
90         }
91         _vcui_cache_flush();
92         __vcui_view_popup_win_del(ad);
93         return;
94 }
95
96 /* create a separate main window for the popups with a high priority   */
97 /* this window will always be displayed on top, even on a lock screen  */
98 static Evas_Object *__vcui_view_popup_create_win(vcui_app_call_data_t *ad, const char *name)
99 {
100         CALL_UI_DEBUG("..");
101         Ecore_X_Window xwin;
102         Evas_Object *eo;
103         int w, h;
104
105         CALL_UI_DEBUG("create the popup main_win...");
106         eo = elm_win_add(NULL, name, ELM_WIN_DIALOG_BASIC);
107         if (eo) {
108                 elm_win_alpha_set(eo, EINA_TRUE);
109                 elm_win_title_set(eo, name);
110                 elm_win_borderless_set(eo, EINA_TRUE);
111                 elm_win_raise(eo);
112                 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
113                 evas_object_resize(eo, w, h);
114
115                 /* Set the popup window type as LEVEL-HIGH so it is always displayed on top */
116                 CALL_UI_DEBUG("...Set HIGH priority...");
117                 xwin = elm_win_xwindow_get(eo);
118                 ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
119                 utilx_set_system_notification_level(ecore_x_display_get(), xwin, UTILX_NOTIFICATION_LEVEL_HIGH);
120
121                 evas_object_show(eo);
122         }
123
124         return eo;
125 }
126
127 void _vcui_view_popup_load(char *popup_msg, double time_out, int bterminate)
128 {
129         CALL_UI_DEBUG("msg:[%s], bterminate:[%d]", popup_msg, bterminate);
130         vcui_app_call_data_t *ad = _vcui_get_app_data();
131
132         if (popup_msg == NULL) {
133                 return;
134         }
135
136         _vcui_view_popup_unload(ad->popup_eo);
137
138 #ifdef  CALL_MW
139         if (ad->bwin_top) {
140                 CALL_UI_DEBUG("parent window TOP");
141                 ad->popup_eo = elm_popup_add(ad->win_main);
142                 _vcui_show_main_ui_set_flag();
143         } else
144 #endif
145         {
146                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
147                 ad->popup_eo = elm_popup_add(ad->popup_mw);
148         }
149         evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
150         elm_object_text_set(ad->popup_eo, popup_msg);
151         elm_popup_timeout_set(ad->popup_eo, time_out);
152         if (bterminate == 0) {
153                 evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad);
154         } else {
155                 evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad);
156         }
157         evas_object_show(ad->popup_eo);
158 }
159
160 void _vcui_view_popup_replace(char *popup_msg, double time_out, int bterminate)
161 {
162         CALL_UI_DEBUG("msg:[%s], bterminate:[%d]", popup_msg, bterminate);
163         vcui_app_call_data_t *ad = _vcui_get_app_data();
164
165         if (ad->popup_eo == NULL) {
166                 _vcui_view_popup_load(popup_msg, time_out, bterminate);
167         } else {
168                 if (popup_msg == NULL) {
169                         return;
170                 }
171
172                 if (ad->view_top != -1) {
173 #ifdef  CALL_MW
174                         _vcui_raise_main_win();
175 #else
176                         if (ad->popup_mw != NULL)
177                                 elm_win_activate(ad->popup_mw);
178 #endif
179                 }
180
181                 elm_object_text_set(ad->popup_eo, popup_msg);
182                 elm_popup_timeout_set(ad->popup_eo, time_out);
183                 if (bterminate == 0) {
184                         evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad);
185                 } else {
186                         evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad);
187                 }
188                 evas_object_show(ad->popup_eo);
189         }
190 }
191
192 void _vcui_view_popup_load_reject_call(char *name, char *number, int end_app)
193 {
194         CALL_UI_DEBUG("..");
195         char msg[DEF_BUF_LEN_LONG] = { 0, };
196
197         if (strlen(name) == 0) {
198                 snprintf(msg, sizeof(msg), "%s<br>%s", number, _("IDS_CALL_POP_REJECTED"));
199         } else if (strlen(number) == 0) {
200                 snprintf(msg, sizeof(msg), "%s<br>%s", name, _("IDS_CALL_POP_REJECTED"));
201         } else {
202                 snprintf(msg, sizeof(msg), "%s<br>%s<br>%s", name, number, _("IDS_CALL_POP_REJECTED"));
203         }
204
205         _vcui_view_popup_load(msg, POPUP_TIMEOUT_LONG, end_app);
206
207 }
208
209 void _vcui_view_popup_load_endcall_time(call_data_t *cd)
210 {
211         unsigned long sec = 0;
212         unsigned long min = 0;
213         unsigned long hr = 0;
214         unsigned long call_duration_in_sec = _vcui_get_diff_now(cd->start_time);
215         char buf[DEF_BUF_LEN] = { 0, };
216         char msg[DEF_BUF_LEN_LONG] = { 0, };
217
218         sec = call_duration_in_sec % 60;
219         min = (call_duration_in_sec / 60) % 60;
220         hr = call_duration_in_sec / 3600;
221         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'));
222
223         snprintf(msg, sizeof(msg), "%s<br>%s<br>%s", cd->call_display, cd->call_num, buf);
224
225         _vcui_view_popup_load(msg, POPUP_TIMEOUT_SHORT, EINA_FALSE);
226 }
227
228 void _vcui_view_popup_load_redial(void)
229 {
230         _vcui_view_popup_load(_("IDS_CALL_POP_REDIALLING"), POPUP_TIMEOUT_NORMAL, EINA_FALSE);
231 }
232
233 static Eina_Bool __vcui_view_popup_timer_cb_vol_ringtone(void *data)
234 {
235         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
236
237         ad->vol_ringtone_popup_del_timer = NULL;
238         return ECORE_CALLBACK_CANCEL;
239 }
240
241 static void __vcui_view_popup_vol_update_icon(int volume_level)
242 {
243         CALL_UI_DEBUG("...");
244         vcui_app_call_data_t *ad = _vcui_get_app_data();
245         Evas_Object *icon = NULL;
246
247         icon = edje_object_part_swallow_get(_EDJ(ad->popup_vol_ly), "volume_icon");
248         if (icon) {
249                 edje_object_part_unswallow(_EDJ(ad->popup_vol_ly), icon);
250                 evas_object_del(icon);
251         }
252
253         icon = elm_icon_add(ad->popup_vol_ly);
254         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
255         elm_icon_resizable_set(icon, 0, 0);
256         elm_object_part_content_set(ad->popup_vol_ly, "volume_icon", icon);
257         if (volume_level == 0)
258                 elm_icon_file_set(icon, VOLUME_MUTE_ICON, NULL);
259         else
260                 elm_icon_file_set(icon, VOLUME_ICON, NULL);
261 }
262
263 static void __vcui_view_popup_vol_ringtone_changed_cb(void *data, Evas_Object *obj, void *event_info)
264 {
265         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
266         double value;
267
268         value = elm_slider_value_get(obj);
269         if (value > RINGTONE_MAX)
270                 value = RINGTONE_MAX;
271         else if (value < RINGTONE_MIN)
272                 value = RINGTONE_MIN;
273
274         ad->ringtone_val = (int)value;
275
276         _vcui_engine_set_volume_level(VCUI_VOL_RING, ad->ringtone_val);
277
278         elm_slider_value_set(obj, ad->ringtone_val);
279         if (ad->vol_ringtone_popup_del_timer) {
280                 ecore_timer_del(ad->vol_ringtone_popup_del_timer);
281                 ad->vol_ringtone_popup_del_timer = NULL;
282         }
283
284         CALL_UI_DEBUG("ad->ringtone_val %d...", ad->ringtone_val);
285         __vcui_view_popup_vol_update_icon(ad->ringtone_val);
286         ad->vol_ringtone_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_ringtone, ad);
287 }
288
289 static void __vcui_view_popup_response_cb_vol_ringtone(void *data, Evas_Object *obj, void *event_info)
290 {
291         CALL_UI_DEBUG("..");
292         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
293
294         if (ad->vol_ringtone_popup_eo) {
295                 CALL_UI_DEBUG("vol_ringtone_popup_eo delete.");
296                 evas_object_del(ad->vol_ringtone_popup_eo);
297                 ad->vol_ringtone_popup_eo = NULL;
298         }
299
300         ad->vol_longpress_cnt = 0;
301
302         if (ad->volup_key_longpress_timer) {
303                 ecore_timer_del(ad->volup_key_longpress_timer);
304                 ad->volup_key_longpress_timer = NULL;
305         }
306
307         if (ad->voldown_key_longpress_timer) {
308                 ecore_timer_del(ad->voldown_key_longpress_timer);
309                 ad->voldown_key_longpress_timer = NULL;
310         }
311
312         _vcui_cache_flush();
313         __vcui_view_popup_win_del(ad);
314         return;
315 }
316
317 void _vcui_view_popup_vol_ringtone(int vol_level)
318 {
319         CALL_UI_DEBUG("vol_level(%d)", vol_level);
320         vcui_app_call_data_t *ad = _vcui_get_app_data();
321         Evas_Object *popup = NULL;
322         Evas_Object *slider = NULL;
323         Evas_Object *icon = NULL;
324
325         if (ad->vol_ringtone_popup_eo) {
326                 __vcui_view_popup_vol_update_icon(vol_level);
327                 elm_slider_value_set(ad->vol_ringtone_slider_eo, vol_level);
328                 if (ad->vol_ringtone_popup_del_timer) {
329                         ecore_timer_del(ad->vol_ringtone_popup_del_timer);
330                         ad->vol_ringtone_popup_del_timer = NULL;
331                 }
332                 ad->vol_ringtone_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_ringtone, ad);
333         } else {
334 #ifdef  CALL_MW
335                 popup = elm_popup_add(ad->win_main);
336 #else
337                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
338                 ad->vol_ringtone_popup_eo = popup = elm_popup_add(ad->popup_mw);
339 #endif
340                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
341                 elm_object_part_text_set(popup, "title,text", dgettext("sys_string", "IDS_COM_BODY_RINGTONE"));
342
343                 ad->popup_vol_ly = _vcui_load_edj(popup, EDJ_NAME, "volume");
344                 if (ad->popup_vol_ly == NULL) {
345                         if (ad->vol_ringtone_popup_eo) {
346                                 CALL_UI_DEBUG("vol_ringtone_popup_eo delete.");
347                                 evas_object_del(ad->vol_ringtone_popup_eo);
348                                 ad->vol_ringtone_popup_eo = NULL;
349                         }
350                         __vcui_view_popup_win_del(ad);
351                         return;
352                 }
353                 elm_object_content_set(popup, ad->popup_vol_ly);
354                 __vcui_view_popup_vol_update_icon(vol_level);
355
356                 slider = elm_slider_add(popup);
357                 elm_slider_horizontal_set(slider, EINA_TRUE);
358                 elm_slider_indicator_show_set(slider, EINA_TRUE);
359                 elm_slider_indicator_format_set(slider, "%.0f");
360                 elm_object_part_content_set(ad->popup_vol_ly, "volume_slider", slider);
361                 elm_slider_min_max_set(slider, 0, 15);
362                 elm_slider_value_set(slider, vol_level);
363                 evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_ringtone_changed_cb, ad);
364                 ad->vol_ringtone_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_ringtone, ad);
365                 evas_object_smart_callback_add(popup, "timeout", __vcui_view_popup_response_cb_vol_ringtone, ad);
366
367                 ad->vol_ringtone_slider_eo = slider;
368                 evas_object_show(popup);
369         }
370
371 }
372
373 static Eina_Bool __vcui_view_popup_timer_cb_vol_voice(void *data)
374 {
375         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
376
377         __vcui_view_popup_response_cb_vol_voice(ad, ad->vol_voice_popup_eo, NULL);
378         ad->vol_voice_popup_del_timer = NULL;
379         return ECORE_CALLBACK_CANCEL;
380 }
381
382 static void __vcui_view_popup_vol_voice_changed_cb(void *data, Evas_Object *obj, void *event_info)
383 {
384         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
385         double value;
386
387         value = elm_slider_value_get(obj);
388         if (value > VOICE_VOL_MAX)
389                 value = VOICE_VOL_MAX;
390         else if (value < VOICE_VOL_MIN)
391                 value = VOICE_VOL_MIN;
392         ad->voice_vol_val = (int)value;
393
394         _vcui_engine_set_volume_level(VCUI_VOL_VOICE, ad->voice_vol_val);
395
396         elm_slider_value_set(obj, ad->voice_vol_val);
397         if (ad->vol_voice_popup_del_timer) {
398                 ecore_timer_del(ad->vol_voice_popup_del_timer);
399                 ad->vol_voice_popup_del_timer = NULL;
400         }
401         ad->vol_voice_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_voice, ad);
402 }
403
404 static void __vcui_view_popup_response_cb_vol_voice(void *data, Evas_Object *obj, void *event_info)
405 {
406         CALL_UI_DEBUG("..");
407         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
408
409         if (ad->vol_voice_popup_eo) {
410                 CALL_UI_DEBUG("vol_voice_popup_eo delete.");
411                 evas_object_del(ad->vol_voice_popup_eo);
412                 ad->vol_voice_popup_eo = NULL;
413         }
414
415         ad->vol_longpress_cnt = 0;
416
417         if (ad->volup_key_longpress_timer) {
418                 ecore_timer_del(ad->volup_key_longpress_timer);
419                 ad->volup_key_longpress_timer = NULL;
420         }
421
422         if (ad->voldown_key_longpress_timer) {
423                 ecore_timer_del(ad->voldown_key_longpress_timer);
424                 ad->voldown_key_longpress_timer = NULL;
425         }
426
427         _vcui_cache_flush();
428         __vcui_view_popup_win_del(ad);
429         return;
430 }
431
432 void _vcui_view_popup_vol_voice(int vol_level)
433 {
434         vcui_app_call_data_t *ad = _vcui_get_app_data();
435         Evas_Object *popup = NULL;
436         Evas_Object *slider = NULL;
437         Evas_Object *icon = NULL;
438
439         if (ad->vol_voice_popup_eo) {
440                 elm_slider_value_set(ad->vol_voice_slider_eo, vol_level);
441                 if (ad->vol_voice_popup_del_timer) {
442                         ecore_timer_del(ad->vol_voice_popup_del_timer);
443                         ad->vol_voice_popup_del_timer = NULL;
444                 }
445                 ad->vol_voice_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_voice, ad);
446         } else {
447 #ifdef  CALL_MW
448                 popup = elm_popup_add(ad->win_main);
449 #else
450                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
451                 popup = elm_popup_add(ad->popup_mw);
452 #endif
453                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
454                 elm_object_part_text_set(popup, "title,text", _("IDS_CALL_BODY_CALL"));
455
456                 ad->popup_vol_ly = _vcui_load_edj(popup, EDJ_NAME, "volume");
457                 if (ad->popup_vol_ly == NULL) {
458                         if (popup) {
459                                 CALL_UI_DEBUG("popup delete.");
460                                 evas_object_del(popup);
461                                 popup = NULL;
462                         }
463                         __vcui_view_popup_win_del(ad);
464                         return;
465                 }
466                 elm_object_content_set(popup, ad->popup_vol_ly);
467                 __vcui_view_popup_vol_update_icon(vol_level);
468
469                 slider = elm_slider_add(ad->popup_vol_ly);
470                 elm_slider_horizontal_set(slider, EINA_TRUE);
471                 elm_slider_indicator_show_set(slider, EINA_TRUE);
472                 elm_slider_indicator_format_set(slider, "%.0f");
473                 elm_object_part_content_set(ad->popup_vol_ly, "volume_slider", slider);
474                 elm_slider_min_max_set(slider, 0, 7);
475                 elm_slider_value_set(slider, vol_level);
476                 evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_voice_changed_cb, ad);
477                 ad->vol_voice_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_voice, ad);
478                 evas_object_smart_callback_add(popup, "block,clicked", __vcui_view_popup_response_cb_vol_voice, ad);
479
480                 ad->vol_voice_slider_eo = slider;
481                 ad->vol_voice_popup_eo = popup;
482                 evas_object_show(popup);
483         }
484 }
485
486 static Eina_Bool __vcui_view_popup_timer_cb_vol_bt(void *data)
487 {
488         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
489
490         ad->vol_bt_popup_del_timer = NULL;
491         return ECORE_CALLBACK_CANCEL;
492 }
493
494 static void __vcui_view_popup_vol_bt_changed_cb(void *data, Evas_Object *obj, void *event_info)
495 {
496         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
497         double value;
498
499         value = elm_slider_value_get(obj);
500         if (value > BT_VOL_MAX)
501                 value = BT_VOL_MAX;
502         else if (value < BT_VOL_MIN)
503                 value = BT_VOL_MIN;
504
505         ad->bt_vol_val = (int)value;
506
507         _vcui_engine_set_volume_level(VCUI_VOL_HEADSET, ad->bt_vol_val);
508
509         elm_slider_value_set(obj, ad->bt_vol_val);
510         if (ad->vol_bt_popup_del_timer) {
511                 ecore_timer_del(ad->vol_bt_popup_del_timer);
512                 ad->vol_bt_popup_del_timer = NULL;
513         }
514         ad->vol_bt_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_bt, ad);
515 }
516
517 static void __vcui_view_popup_response_cb_vol_bt(void *data, Evas_Object *obj, void *event_info)
518 {
519         CALL_UI_DEBUG("..");
520         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
521
522         if (ad->vol_bt_popup_eo) {
523                 CALL_UI_DEBUG("vol_bt_popup_eo delete.");
524                 evas_object_del(ad->vol_bt_popup_eo);
525                 ad->vol_bt_popup_eo = NULL;
526                 __vcui_view_popup_win_del(ad);
527         }
528
529         ad->vol_longpress_cnt = 0;
530
531         if (ad->volup_key_longpress_timer) {
532                 ecore_timer_del(ad->volup_key_longpress_timer);
533                 ad->volup_key_longpress_timer = NULL;
534         }
535
536         if (ad->voldown_key_longpress_timer) {
537                 ecore_timer_del(ad->voldown_key_longpress_timer);
538                 ad->voldown_key_longpress_timer = NULL;
539         }
540
541         _vcui_cache_flush();
542         return;
543 }
544
545 void _vcui_view_popup_vol_bt(int vol_level)
546 {
547         vcui_app_call_data_t *ad = _vcui_get_app_data();
548         Evas_Object *popup = NULL;
549         Evas_Object *slider = NULL;
550         Evas_Object *icon = NULL;
551
552         if (ad->vol_bt_popup_eo) {
553                 elm_slider_value_set(ad->vol_bt_slider_eo, vol_level);
554                 if (ad->vol_bt_popup_del_timer) {
555                         ecore_timer_del(ad->vol_bt_popup_del_timer);
556                         ad->vol_bt_popup_del_timer = NULL;
557                 }
558                 ad->vol_bt_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_bt, ad);
559         } else {
560 #ifdef  CALL_MW
561                 popup = elm_popup_add(ad->win_main);
562 #else
563                 ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
564                 popup = elm_popup_add(ad->popup_mw);
565 #endif
566                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
567                 elm_object_part_text_set(popup, "title,text", _("IDS_CALL_BUTTON_HEADSET"));
568
569                 ad->popup_vol_ly = _vcui_load_edj(popup, EDJ_NAME, "volume");
570                 if (ad->popup_vol_ly == NULL) {
571                         if (popup) {
572                                 CALL_UI_DEBUG("popup delete.");
573                                 evas_object_del(popup);
574                                 popup = NULL;
575                         }
576                         __vcui_view_popup_win_del(ad);
577                         return;
578                 }
579                 elm_object_content_set(popup, ad->popup_vol_ly);
580                 __vcui_view_popup_vol_update_icon(vol_level);
581
582                 slider = elm_slider_add(popup);
583                 elm_slider_horizontal_set(slider, EINA_TRUE);
584                 elm_slider_indicator_show_set(slider, EINA_TRUE);
585                 elm_slider_indicator_format_set(slider, "%.0f");
586                 elm_object_part_content_set(ad->popup_vol_ly, "volume_slider", slider);
587                 elm_slider_min_max_set(slider, 0, 15);
588                 elm_slider_value_set(slider, vol_level);
589                 evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_bt_changed_cb, ad);
590                 ad->vol_bt_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_bt, ad);
591                 evas_object_smart_callback_add(popup, "timeout", __vcui_view_popup_response_cb_vol_bt, ad);
592
593                 ad->vol_bt_slider_eo = slider;
594                 ad->vol_bt_popup_eo = popup;
595                 evas_object_show(popup);
596         }
597
598 }
599
600 static Eina_Bool __vcui_view_popup_response_cb_delay(void *data)
601 {
602         CALL_UI_DEBUG("..");
603
604         _vcui_view_popup_load((char *)data, POPUP_TIMEOUT_SHORT, EINA_FALSE);
605
606         vcui_app_call_data_t *ad = _vcui_get_app_data();
607         ecore_timer_del(ad->popup_delay);
608         ad->popup_delay = NULL;
609
610         CALL_UI_DEBUG("delay popup work");
611         return EINA_FALSE;
612 }
613
614 void _vcui_view_popup_load_with_delay(char *popup_msg, double delay_time)
615 {
616         CALL_UI_DEBUG("..");
617         vcui_app_call_data_t *ad = _vcui_get_app_data();
618
619         ad->popup_delay = ecore_timer_add(delay_time, __vcui_view_popup_response_cb_delay, popup_msg);
620         CALL_UI_DEBUG("delay popup");
621 }
622
623 void _vcui_view_popup_unload_progress(vcui_app_call_data_t *ad)
624 {
625         CALL_UI_DEBUG("..");
626
627         if (ad->popup_progress_eo) {
628                 evas_object_hide(ad->popup_progress_eo);
629                 evas_object_del(ad->popup_progress_eo);
630                 ad->popup_progress_eo = NULL;
631         }
632         __vcui_view_popup_win_del(ad);
633
634         _vcui_cache_flush();
635
636         return;
637 }
638
639 static void __vcui_view_popup_progressbar_set_label(char *status_string)
640 {
641         CALL_UI_DEBUG("..");
642         Evas_Object *label;
643         vcui_app_call_data_t *ad = _vcui_get_app_data();
644         CALL_UI_DEBUG("popup_progress_set_label ...\n");
645
646         label = (Evas_Object *)evas_object_data_get(ad->popup_progress_eo, "progress_label");
647         elm_object_text_set(label, status_string);
648 }
649
650 static void __vcui_view_popup_progressbar_response_cb(void *data, Evas_Object *obj, void *event_info)
651 {
652         vcui_app_call_data_t *ad = _vcui_get_app_data();
653         CALL_UI_DEBUG("__vcui_view_popup_progressbar_response_cb callback=%d\n", (int)event_info);
654
655         if (ad->popup_progress_eo) {
656                 evas_object_del(ad->popup_progress_eo);
657                 ad->popup_progress_eo = NULL;
658         }
659
660         evas_object_del(obj);
661         __vcui_view_popup_win_del(ad);
662 }
663
664 void _vcui_view_popup_load_progress(char *display_string)
665 {
666         CALL_UI_DEBUG("..");
667         Evas_Object *progressbar_eo;
668         Evas_Object *box, *label;
669         vcui_app_call_data_t *ad = _vcui_get_app_data();
670
671         if (NULL != ad->popup_progress_eo) {
672                 __vcui_view_popup_progressbar_set_label(display_string);
673                 return;
674         }
675 #ifdef  CALL_MW
676         ad->popup_progress_eo = elm_popup_add(ad->win_main);
677 #else
678         ad->popup_mw = __vcui_view_popup_create_win(ad, "base");
679         ad->popup_progress_eo = elm_popup_add(ad->popup_mw);
680 #endif
681
682         label = elm_label_add(ad->popup_progress_eo);
683         elm_object_text_set(label, display_string);
684         evas_object_show(label);
685         box = elm_box_add(ad->popup_progress_eo);
686         progressbar_eo = elm_progressbar_add(ad->popup_progress_eo);
687         elm_object_style_set(progressbar_eo, "list_progress");
688         elm_progressbar_pulse(progressbar_eo, EINA_TRUE);
689         evas_object_size_hint_align_set(progressbar_eo, EVAS_HINT_FILL, 0.5);
690         evas_object_size_hint_weight_set(progressbar_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
691         elm_progressbar_pulse(progressbar_eo, EINA_TRUE);
692         evas_object_show(progressbar_eo);
693         elm_box_pack_end(box, label);
694         elm_box_pack_end(box, progressbar_eo);
695         evas_object_show(box);
696         elm_object_content_set(ad->popup_progress_eo, box);
697         evas_object_smart_callback_add(ad->popup_progress_eo, "timeout", __vcui_view_popup_progressbar_response_cb, NULL);
698         evas_object_show(ad->popup_progress_eo);
699
700         evas_object_data_set(ad->popup_progress_eo, "progress_label", (void *)label);
701 }
702
703 void _vcui_view_popup_load_sending_dtmf(char *status_string, char *dtmf_num)
704 {
705         CALL_UI_DEBUG("..");
706         char msg[DEF_BUF_LEN_LONG] = { 0, };
707
708         snprintf(msg, DEF_BUF_LEN_LONG, "%s<br>%s", status_string, dtmf_num);
709
710         _vcui_view_popup_load_progress(msg);
711 }
712
713 static void __vcui_view_popup_snd_path_bt_cb(void *data, Evas_Object *obj, void *event_info)
714 {
715         CALL_UI_DEBUG("..");
716         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
717
718         elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_HEADSET);
719
720         _vcui_engine_change_sound_path(VCUI_AUDIO_HEADSET);
721
722         ad->speaker_status = EINA_FALSE;
723         ad->headset_status = EINA_TRUE;
724 }
725
726 static void __vcui_view_popup_snd_path_earjack_cb(void *data, Evas_Object *obj, void *event_info)
727 {
728         CALL_UI_DEBUG("..");
729         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
730
731         elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_EARJACK);
732
733         _vcui_engine_change_sound_path(VCUI_AUDIO_EARJACK);
734
735         ad->speaker_status = EINA_FALSE;
736         ad->headset_status = EINA_FALSE;
737 }
738
739 static void __vcui_view_popup_snd_path_speaker_cb(void *data, Evas_Object *obj, void *event_info)
740 {
741         CALL_UI_DEBUG("..");
742         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
743
744         elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_SPEAKER);
745
746         _vcui_engine_change_sound_path(VCUI_AUDIO_SPEAKER);
747
748         ad->speaker_status = EINA_TRUE;
749         ad->headset_status = EINA_FALSE;
750 }
751
752 static void __vcui_view_popup_hide_snd_path_cb(void *data, Evas_Object *obj, void *event_info)
753 {
754         CALL_UI_DEBUG("..");
755         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;
756
757         if (ad->ctxpopup_eo) {
758                 evas_object_del(ad->ctxpopup_eo);
759                 ad->ctxpopup_eo = NULL;
760         }
761 }
762
763 static void __vcui_view_popup_move_snd_path(Evas_Object *ctxpopup, Evas_Object *win, Evas_Coord touch_x, Evas_Coord touch_y)
764 {
765         evas_object_move(ctxpopup, touch_x, touch_y);
766 }
767
768 void _vcui_view_popup_load_snd_path()
769 {
770         CALL_UI_DEBUG("..");
771         vcui_app_call_data_t *ad = _vcui_get_app_data();
772         int bearjack_status = EINA_FALSE;
773
774         Evas_Object *ctxpopup = NULL;
775         Evas_Object *radio = NULL;
776         Evas_Object *group = NULL;
777
778         int status = -1;
779         char *bt_name = NULL;
780         int snd_path;
781
782         /* get bt name */
783         bt_name = vconf_get_str(VCONFKEY_BT_HEADSET_NAME);
784         if (!bt_name) {
785                 bt_name = _("IDS_CALL_BUTTON_HEADSET");
786         }
787
788         /* check earjack status */
789         if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &status)) {
790                 if (status != VCONFKEY_SYSMAN_EARJACK_REMOVED) {
791                         bearjack_status = EINA_TRUE;
792                 }
793         }
794
795         if (ad->ctxpopup_eo) {
796                 evas_object_del(ad->ctxpopup_eo);
797                 ad->ctxpopup_eo = NULL;
798         }
799
800         ctxpopup = elm_ctxpopup_add(ad->win_main);
801
802         evas_object_smart_callback_add(ctxpopup, "dismissed", __vcui_view_popup_hide_snd_path_cb, ad);
803
804         __vcui_view_popup_move_snd_path(ctxpopup, ad->win_main, ad->touch_x, ad->touch_y);
805
806         /* bt headset */
807         group = radio = elm_radio_add(ctxpopup);
808         elm_radio_state_value_set(radio, VCUI_SND_PATH_HEADSET);
809         evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_HEADSET));
810         evas_object_show(radio);
811         elm_ctxpopup_item_append(ctxpopup, bt_name, radio, __vcui_view_popup_snd_path_bt_cb, ad);
812
813         /* earjack or receiver */
814         radio = elm_radio_add(ctxpopup);
815         elm_radio_state_value_set(radio, VCUI_SND_PATH_EARJACK);
816         elm_radio_group_add(radio, group);
817         evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_EARJACK));
818         evas_object_show(radio);
819         if (bearjack_status) {
820                 elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_HEADPHONES"), radio, __vcui_view_popup_snd_path_earjack_cb, ad);
821         } else {
822                 elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_RECEIVER"), radio, __vcui_view_popup_snd_path_earjack_cb, ad);
823         }
824
825         /* speaker */
826         radio = elm_radio_add(ctxpopup);
827         elm_radio_state_value_set(radio, VCUI_SND_PATH_SPEAKER);
828         elm_radio_group_add(radio, group);
829         evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_SPEAKER));
830         evas_object_show(radio);
831         elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_SPEAKER"), radio, __vcui_view_popup_snd_path_speaker_cb, ad);
832         /* current sound path set */
833         snd_path = _vcui_engine_get_sound_path();
834         switch (snd_path) {
835         case VCUI_AUDIO_SPEAKER:
836                 {
837                         elm_radio_value_set(group, VCUI_SND_PATH_SPEAKER);
838                 }
839                 break;
840         case VCUI_AUDIO_HEADSET:
841                 {
842                         elm_radio_value_set(group, VCUI_SND_PATH_HEADSET);
843                 }
844                 break;
845         case VCUI_AUDIO_EARJACK:
846         case VCUI_AUDIO_RECEIVER:
847                 {
848                         elm_radio_value_set(group, VCUI_SND_PATH_EARJACK);
849                 }
850                 break;
851         default:
852                 CALL_UI_DEBUG("ERROR - wrong type:[%d]", snd_path);
853                 return;
854                 break;
855         }
856
857         evas_object_show(ctxpopup);
858
859         ad->ctxpopup_eo = ctxpopup;
860         ad->ctxpopup_radio_group_eo = group;
861 }
862
863 #if 0
864 static Eina_Bool __vcui_view_ticker_response_cb(void *data)
865 {
866         vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data;
867         CALL_UI_DEBUG("..");
868
869         if (ad->ticker_tm) {
870                 ecore_timer_del(ad->ticker_tm);
871                 ad->ticker_tm = NULL;
872         }
873
874         /* to be implemented */
875
876         return ECORE_CALLBACK_CANCEL;
877 }
878
879 void _vcui_view_create_ticker_noti(char *ticker_msg)
880 {
881         Evas_Object *ticker_noti = NULL;
882         vcui_app_call_data_t *ad = _vcui_get_app_data();
883
884         CALL_UI_DEBUG("load_ticker_noti_at_bottom enter \n");
885
886         ticker_noti = elm_tickernoti_add (NULL);
887         elm_object_style_set(ticker_noti, "info");
888         elm_object_text_set(ticker_noti, ticker_msg);
889         elm_tickernoti_orient_set(ticker_noti, ELM_TICKERNOTI_ORIENT_BOTTOM);
890         if (ad->ticker_tm) {
891                 ecore_timer_del(ad->ticker_tm);
892                 ad->ticker_tm = NULL;
893         }
894         ad->ticker_tm = ecore_timer_add(TICKER_TIMEOUT, __vcui_view_ticker_response_cb, ad);
895         evas_object_show(ticker_noti);
896
897         CALL_UI_DEBUG("load_ticker_noti_at_bottom over \n");
898 }
899 #endif