Make TIZEN 2.0
[apps/home/call.git] / ui / src / vcui-view-multi-call-conf.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-common.h"
21 #include "vcui-view-elements.h"
22 #include "vcui-view-multi-call-conf.h"
23 #include "vcui-view-keypad.h"
24
25 #define VCUI_VIEW_MULTICALL_CONF_LAYOUT_ID "MULTIVIEWCONF"
26 typedef struct {
27         Evas_Object *contents;
28         Evas_Object *caller_info;
29         Evas_Object *btn_ly;
30         Evas_Object *cid_ly;
31         Evas_Object *ic;
32         Evas_Object *record_btn;
33         vcui_app_call_status_t call_status;
34         int     total_members;
35 } vcui_view_multi_call_conf_priv_t;
36
37 static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
38 static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
39 static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data);
40 static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data);
41 static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data);
42
43 static voice_call_view_data_t s_view = {
44         .type = VIEW_INCALL_MULTICALL_CONF_VIEW,
45         .app_data = NULL,
46         .layout = NULL,
47         .onCreate = __vcui_view_multi_call_conf_oncreate,
48         .onUpdate = __vcui_view_multi_call_conf_onupdate,
49         .onHide = __vcui_view_multi_call_conf_onhide,
50         .onShow = __vcui_view_multi_call_conf_onshow,
51         .onDestroy = __vcui_view_multi_call_conf_ondestroy,
52         .priv = NULL,
53 };
54
55 voice_call_view_data_t *_vcui_view_multi_call_conf_new(vcui_app_call_data_t *ad)
56 {
57         s_view.app_data = ad;
58         s_view.priv = calloc(1, sizeof(vcui_view_multi_call_conf_priv_t));
59
60         if (!s_view.priv) {
61                 CALL_UI_DEBUG("ERROR!!!!!!!!!!! ");
62         }
63
64         return &s_view;
65 }
66
67 static void __vcui_view_multi_call_conf_draw_screen(Evas_Object *eo, void *data)
68 {
69         CALL_UI_DEBUG("..");
70
71         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
72         vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv;
73         vcui_app_call_data_t *ad = vd->app_data;
74         char buf[DEF_BUF_LEN] = { 0, };
75         call_data_t *call_data = NULL;
76
77         priv->call_status = _vcui_doc_get_group_call_status();
78         call_data = _vcui_doc_get_call_data_by_call_status(priv->call_status);
79         if (call_data == NULL) {
80                 CALL_UI_DEBUG("call data is null");
81                 return;
82         }
83         priv->total_members = _vcui_doc_get_hold_call_data_count() + _vcui_doc_get_unhold_call_data_count();
84
85         elm_win_rotation_with_resize_set(ad->win_main, ad->rotate_angle);
86         elm_win_rotation_with_resize_set(ad->popup_mw, ad->rotate_angle);
87
88         if (ad->rotate_angle == 0 || ad->rotate_angle == 180) {
89                 CALL_UI_DEBUG("create portrait mode layout items");
90                 /* call image */
91                 _vcui_show_wallpaper_image(priv->contents);
92                 priv->ic = _vcui_show_default_image(priv->contents, vd->app_data->win_main, CONF_ICON);
93                 if (priv->call_status == CALL_HOLD) {
94                         if (ad->root_w == MAIN_WIN_HD_W && ad->root_h == MAIN_WIN_HD_H) {
95                                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_HD", "CID_HD");
96                         } else if (ad->root_w == MAIN_WIN_WVGA_W && ad->root_h == MAIN_WIN_WVGA_H) {
97                                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_WVGA", "CID_WVGA");
98                         }
99                         edje_object_signal_emit(_EDJ(priv->caller_info), "set-hold-state", "call-screen");
100                 } else {
101                         Evas_Object *txt_status = edje_object_part_swallow_get(_EDJ(priv->caller_info), "txt_status");
102                         if (txt_status) {
103                                 edje_object_part_unswallow(_EDJ(priv->caller_info), txt_status);
104                                 evas_object_del(txt_status);
105                         }
106                         edje_object_signal_emit(_EDJ(priv->contents), "HIDE_DIM", "CID");
107                         edje_object_signal_emit(_EDJ(priv->caller_info), "set-unhold-state", "call-screen");
108                 }
109
110                 _vcui_show_call_bg_img(priv->contents);
111                 _vcui_show_caller_info_status(data, _("IDS_CALL_BODY_ON_HOLD_ABB"), EINA_FALSE);
112                 _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_FALSE);
113                 snprintf(buf, DEF_BUF_LEN, "%d %s", priv->total_members, _("IDS_CALL_BODY_PEOPLE"));
114                 _vcui_show_caller_info_number(vd, buf, EINA_FALSE);
115
116                 _vcui_show_caller_info_icon(vd, EINA_FALSE);
117
118                 _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data));
119
120                 {
121                         CALL_UI_DEBUG("..");
122
123                         /*create a small button for Hold/Swap*/
124                         _vcui_create_hold_swap_button(vd);
125
126                         if ((_vcui_is_phonelock_status() == EINA_TRUE) && (_vcui_is_idle_lock() == EINA_TRUE)) {
127                                 _vcui_create_top_middle_button_disabled(vd);
128                         } else {
129                                 _vcui_create_top_middle_button(vd);
130                         }
131                         _vcui_create_top_right_button(vd);
132                         _vcui_create_bottom_left_button(vd);
133                         _vcui_create_bottom_middle_button(vd);
134
135                         {
136                                 _vcui_create_top_left_button(vd);
137                                 _vcui_create_bottom_right_button(vd);
138                         }
139                 }
140
141                 ad->beffect_needed = EINA_FALSE;
142         } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) {
143                 CALL_UI_DEBUG("landscape mode not supported");
144         }
145
146         _vcui_elements_check_keypad_n_hide(vd);
147
148         evas_object_show(eo);
149 }
150
151 static Evas_Object *__vcui_view_multi_call_conf_create_contents(void *data, char *group)
152 {
153         if (data == NULL) {
154                 CALL_UI_DEBUG("ERROR");
155                 return NULL;
156         }
157         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
158
159         Evas_Object *eo;
160
161         /* load edje */
162         eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group);
163         if (eo == NULL)
164                 return NULL;
165
166         return eo;
167 }
168
169 static Evas_Object *__vcui_view_multi_call_conf_create_layout_main(Evas_Object *parent)
170 {
171         if (parent == NULL) {
172                 CALL_UI_DEBUG("ERROR");
173                 return NULL;
174         }
175
176         Evas_Object *ly;
177         ly = elm_layout_add(parent);
178         retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
179
180         elm_layout_theme_set(ly, "standard", "window", "integration");
181         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
182         elm_win_resize_object_add(parent, ly);
183
184         edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
185         edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
186         evas_object_show(ly);
187
188         return ly;
189 }
190
191 static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
192 {
193         voice_call_view_data_t *vd = view_data;
194
195         if (!vd->layout) {
196
197                 /* Create Main Layout */
198                 vd->layout = __vcui_view_multi_call_conf_create_layout_main(vd->app_data->win_main);
199                 if (vd->layout == NULL) {
200                         CALL_UI_DEBUG("ERROR");
201                         return VC_ERROR;
202                 }
203         } else {
204                 CALL_UI_DEBUG("[UI]ad->layout_multicallconf==NULL case ");
205                 evas_object_show(vd->layout);
206         }
207
208         __vcui_view_multi_call_conf_onshow(view_data);
209         return VC_NO_ERROR;
210 }
211
212 static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
213 {
214         CALL_UI_DEBUG("multicall-conf view update");
215
216         __vcui_view_multi_call_conf_onshow(view_data);
217
218         return VC_NO_ERROR;
219 }
220
221 static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data)
222 {
223         CALL_UI_DEBUG("multicall-conf view hide");
224
225         evas_object_hide(view_data->layout);
226         return VC_NO_ERROR;
227 }
228
229 static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data)
230 {
231         CALL_UI_DEBUG("multicall-conf view show");
232
233         vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)view_data->priv;
234         Evas_Object *sep_ly = NULL;
235
236         vcui_app_call_data_t *ad = view_data->app_data;
237         /*if (priv->cid_ly) {
238                 CALL_UI_DEBUG("..");
239                 evas_object_del(priv->cid_ly);
240                 priv->cid_ly = NULL;
241         }
242         if (priv->contents) {
243                 evas_object_del(priv->contents);
244                 priv->contents = NULL;
245         }*/
246
247         if (ad->rotate_angle == 0 || ad->rotate_angle == 180) {
248                 CALL_UI_DEBUG("portrait mode layout");
249                 priv->contents = __vcui_view_multi_call_conf_create_contents(view_data, GRP_MULTICALL_CONF);
250                 priv->caller_info = __vcui_view_multi_call_conf_create_contents(view_data, GRP_CALLER_INFO);
251                 elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info);
252                 sep_ly = __vcui_view_multi_call_conf_create_contents(view_data, GRP_SEPARATOR_LAYOUT);
253                 elm_object_part_content_set(priv->contents, "btn_bg", sep_ly);
254                 priv->btn_ly = __vcui_view_multi_call_conf_create_contents(view_data, GRP_BUTTON_LAYOUT);
255                 elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly);
256         } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) {
257                 CALL_UI_DEBUG("landscape mode not supported");
258         }
259         elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents);
260         evas_object_name_set(priv->contents, VCUI_VIEW_MULTICALL_CONF_LAYOUT_ID);
261         CALL_UI_DEBUG("[========== MULTIVIEWCONF: priv->contents Addr : [%p] ==========]", priv->contents);
262
263         __vcui_view_multi_call_conf_draw_screen(priv->contents, view_data);
264
265         evas_object_hide(view_data->layout);
266         evas_object_show(view_data->layout);
267         return VC_NO_ERROR;
268 }
269
270 static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data)
271 {
272         CALL_UI_DEBUG("multicall-conf view destroy");
273         vcui_app_call_data_t *ad = _vcui_get_app_data();
274
275         voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW];
276         vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv;
277
278         if (priv != NULL) {
279                 if (priv->cid_ly) {
280                         CALL_UI_DEBUG("..");
281                         evas_object_del(priv->cid_ly);
282                         priv->cid_ly = NULL;
283                 }
284                 if (priv->btn_ly) {
285                         evas_object_del(priv->btn_ly);
286                         priv->btn_ly = NULL;
287                 }
288
289                 /*Delete keypad layout*/
290                 _vcui_keypad_delete_layout(priv->contents);
291
292                 if (priv->contents) {
293                         evas_object_del(priv->contents);
294                         priv->contents = NULL;
295                 }
296
297                 free(priv);
298                 priv = NULL;
299         }
300
301         if (vd->layout != NULL) {
302                 evas_object_hide(vd->layout);
303                 evas_object_del(vd->layout);
304                 vd->layout = NULL;
305         }
306
307         ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW] = NULL;
308
309         _vcui_cache_flush();
310         CALL_UI_DEBUG("complete destroy multi view conf");
311
312         return VC_NO_ERROR;
313 }
314
315 int     _vcui_view_multi_call_conf_check_valid_eo(voice_call_view_data_t *vd)
316 {
317         CALL_UI_DEBUG("..");
318
319         vcui_view_multi_call_conf_priv_t *priv = NULL;
320         int valid = -1;
321
322         VCUI_RETURN_VALUE_IF_FAIL(vd , -1);
323         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
324
325         valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_MULTICALL_CONF_LAYOUT_ID);
326
327         return valid;
328 }
329
330 Evas_Object *_vcui_view_multi_call_conf_get_main_layout(voice_call_view_data_t *vd)
331 {
332         CALL_UI_DEBUG("..");
333         vcui_view_multi_call_conf_priv_t *priv = NULL;
334
335         VCUI_RETURN_NULL_IF_FAIL(vd);
336         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
337
338         VCUI_RETURN_NULL_IF_FAIL(priv);
339         return priv->contents;
340 }
341
342 int     _vcui_view_multi_call_conf_get_call_status(voice_call_view_data_t *vd)
343 {
344         CALL_UI_DEBUG("..");
345         vcui_view_multi_call_conf_priv_t *priv = NULL;
346         int call_status = 0;
347
348         VCUI_RETURN_INVALID_IF_FAIL(vd);
349         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
350
351         VCUI_RETURN_INVALID_IF_FAIL(priv);
352         if (priv->call_status == CALL_HOLD) {
353                 call_status = CALL_HOLD;
354         } else {
355                 call_status = CALL_UNHOLD;
356         }
357
358         return call_status;
359 }
360
361 void _vcui_view_multi_call_conf_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur)
362 {
363         vcui_view_multi_call_conf_priv_t *priv = NULL;
364
365         VCUI_RETURN_IF_FAIL(vd);
366         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
367
368         VCUI_RETURN_IF_FAIL(priv);
369         edje_object_part_text_set(_EDJ(priv->caller_info), "txt_timer", _(pcall_dur));
370 }
371
372 Evas_Object *_vcui_view_multi_call_conf_get_button_layout(voice_call_view_data_t *vd)
373 {
374         CALL_UI_DEBUG("..");
375         vcui_view_multi_call_conf_priv_t *priv = NULL;
376
377         VCUI_RETURN_NULL_IF_FAIL(vd);
378         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
379
380         VCUI_RETURN_NULL_IF_FAIL(priv);
381         return priv->btn_ly;
382 }
383
384 Evas_Object *_vcui_view_multi_call_conf_get_cid_layout(voice_call_view_data_t *vd)
385 {
386         CALL_UI_DEBUG("..");
387         vcui_view_multi_call_conf_priv_t *priv = NULL;
388
389         VCUI_RETURN_NULL_IF_FAIL(vd);
390         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
391
392         VCUI_RETURN_NULL_IF_FAIL(priv);
393         return priv->cid_ly;
394 }
395
396 int     _vcui_view_multi_call_conf_get_total_members(voice_call_view_data_t *vd)
397 {
398         CALL_UI_DEBUG("..");
399         vcui_view_multi_call_conf_priv_t *priv = NULL;
400
401         VCUI_RETURN_INVALID_IF_FAIL(vd);
402         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
403
404         VCUI_RETURN_INVALID_IF_FAIL(priv);
405
406         return priv->total_members;
407 }
408
409 Evas_Object *_vc_ui_view_multi_call_conf_get_caller_info(voice_call_view_data_t *vd)
410 {
411         CALL_UI_DEBUG("..");
412         vcui_view_multi_call_conf_priv_t *priv = NULL;
413
414         VCUI_RETURN_NULL_IF_FAIL(vd);
415         priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;
416
417         VCUI_RETURN_NULL_IF_FAIL(priv);
418         return priv->caller_info;
419 }
420