apply FSL(Flora Software License)
[apps/home/call.git] / ui / vcui-view-multi-call-split.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-view-elements.h"
20 #include "vcui-view-multi-call-split.h"
21
22 static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
23 static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
24 static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data);
25 static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data);
26 static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data);
27
28 static voice_call_view_data_t s_view = {
29         .type = VIEW_INCALL_MULTICALL_SPLIT_VIEW,
30         .app_data = NULL,
31         .layout = NULL,
32         .onCreate = __vcui_view_multi_call_split_oncreate,
33         .onUpdate = __vcui_view_multi_call_split_onupdate,
34         .onHide = __vcui_view_multi_call_split_onhide,
35         .onShow = __vcui_view_multi_call_split_onshow,
36         .onDestroy = __vcui_view_multi_call_split_ondestroy,
37         .priv = NULL,
38 };
39
40 voice_call_view_data_t *_vcui_view_multi_call_split_new(vcui_app_call_data_t *ad)
41 {
42         s_view.app_data = ad;
43         s_view.priv = calloc(1, sizeof(incall_multi_view_split_priv_t));
44
45         if (!s_view.priv) {
46                 CALL_UI_DEBUG("ERROR!!!!!!!!!!!");
47         }
48
49         return &s_view;
50 }
51
52 static void __vcui_more_btn_cb(void *data, Evas_Object *obj, void *event_info)
53 {
54         CALL_UI_DEBUG("..");
55         _vcui_view_change(VIEW_INCALL_MULTICALL_LIST_VIEW, 0, 0, 0);
56 }
57
58 static void __vcui_view_multi_call_split_draw_screen(Evas_Object *eo, void *data)
59 {
60         CALL_UI_DEBUG("..");
61
62         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
63         incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv;
64
65         vcui_app_call_data_t *ad = vd->app_data;
66
67         Evas_Object *sw1;
68         Evas_Object *sw2;
69         Evas_Object *sw3;
70         Evas_Object *sw4;
71         Evas_Object *play_ic;
72         Evas_Object *pause_ic;
73         Evas_Object *more_ic;
74
75         priv->now_data_hold = _vcui_doc_get_last_status(CALL_HOLD);
76         priv->now_data_unhold = _vcui_doc_get_last_status(CALL_UNHOLD);
77
78         if ((priv->now_data_hold == NULL) || (priv->now_data_unhold == NULL)) {
79                 CALL_UI_DEBUG("call data is null");
80                 return;
81         }
82
83         sw1 = edje_object_part_swallow_get(_EDJ(eo), "swl_cid_1");
84         if (sw1) {
85                 edje_object_part_unswallow(_EDJ(eo), sw1);
86                 evas_object_del(sw1);
87         }
88         sw2 = edje_object_part_swallow_get(_EDJ(eo), "swl_cid_2");
89         if (sw2) {
90                 edje_object_part_unswallow(_EDJ(eo), sw2);
91                 evas_object_del(sw2);
92         }
93         sw3 = edje_object_part_swallow_get(_EDJ(eo), "txt_call_name_1");
94         if (sw3) {
95                 edje_object_part_unswallow(_EDJ(eo), sw3);
96                 evas_object_del(sw3);
97         }
98         sw4 = edje_object_part_swallow_get(_EDJ(eo), "txt_call_name_2");
99         if (sw4) {
100                 edje_object_part_unswallow(_EDJ(eo), sw4);
101                 evas_object_del(sw4);
102         }
103         play_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_play");
104         if (play_ic) {
105                 edje_object_part_unswallow(_EDJ(eo), play_ic);
106                 evas_object_del(play_ic);
107         }
108         pause_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_pause");
109         if (pause_ic) {
110                 edje_object_part_unswallow(_EDJ(eo), pause_ic);
111                 evas_object_del(pause_ic);
112         }
113         more_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_more");
114         if (more_ic) {
115                 edje_object_part_unswallow(_EDJ(eo), more_ic);
116                 evas_object_del(more_ic);
117         }
118
119         priv->ic_incall = elm_icon_add(vd->app_data->win_main);
120         elm_object_part_content_set(eo, "swl_cid_1", priv->ic_incall);
121
122         priv->ic_onhold = elm_icon_add(vd->app_data->win_main);
123         elm_object_part_content_set(eo, "swl_cid_2", priv->ic_onhold);
124
125         play_ic = elm_icon_add(vd->app_data->win_main);
126         elm_object_part_content_set(eo, "swl_play", play_ic);
127         pause_ic = elm_icon_add(vd->app_data->win_main);
128         elm_object_part_content_set(eo, "swl_pause", pause_ic);
129         more_ic = elm_icon_add(vd->app_data->win_main);
130         elm_object_part_content_set(eo, "swl_more", more_ic);
131
132         CALL_UI_DEBUG("priv->now_data_unhold->call_num:[%s]", priv->now_data_unhold->call_num);
133         CALL_UI_DEBUG("priv->now_data_hold->call_num:[%s]", priv->now_data_hold->call_num);
134         CALL_UI_DEBUG("priv->now_data_unhold->call_file_path:[%s]", priv->now_data_unhold->call_file_path);
135         CALL_UI_DEBUG("priv->now_data_hold->call_file_path:[%s]", priv->now_data_hold->call_file_path);
136
137         _vcui_show_wallpaper_image(priv->contents);
138         if (_vcui_doc_get_count_unhold() == 1 && _vcui_doc_get_count_hold() == 1) {
139                 /* in call */
140                 elm_icon_file_set(priv->ic_incall, (char *)priv->now_data_unhold->call_file_path, NULL);
141
142                 if (strlen((char *)priv->now_data_unhold->call_display) == 0) {
143                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_num);
144                 } else {
145                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_display);
146                 }
147
148                 /* on hold */
149                 elm_icon_file_set(priv->ic_onhold, (char *)priv->now_data_hold->call_file_path, NULL);
150
151                 if (strlen((char *)priv->now_data_hold->call_display) == 0) {
152                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_num);
153                 } else {
154                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_display);
155                 }
156
157                 /* on hold callback */
158                 if (priv->ic_onhold) {
159                         evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb);
160                 }
161                 evas_object_smart_callback_add(priv->ic_onhold, "clicked", _vcui_swap_btn_cb, vd);
162         } else if (_vcui_doc_get_count_unhold() == 1 && _vcui_doc_get_count_hold() > 1) {
163                 /* in call */
164                 elm_icon_file_set(priv->ic_incall, (char *)priv->now_data_unhold->call_file_path, NULL);
165
166                 if (strlen((char *)priv->now_data_unhold->call_display) == 0) {
167                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_num);
168                 } else {
169                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_display);
170                 }
171
172                 /* on hold */
173                 elm_icon_file_set(priv->ic_onhold, CONF_ICON, NULL);
174                 edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", _("IDS_CALL_OPT_CONFERENCE_CALL"));
175
176                 /* on hold callback */
177                 if (priv->ic_onhold) {
178                         evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb);
179                 }
180                 evas_object_smart_callback_add(priv->ic_onhold, "clicked", _vcui_swap_btn_cb, vd);
181         } else if (_vcui_doc_get_count_unhold() > 1 && _vcui_doc_get_count_hold() == 1) {
182                 /* in call */
183                 elm_icon_file_set(priv->ic_incall, CONF_ICON, NULL);
184                 edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", _("IDS_CALL_OPT_CONFERENCE_CALL"));
185
186                 /* on hold */
187                 elm_icon_file_set(priv->ic_onhold, (char *)priv->now_data_hold->call_file_path, NULL);
188
189                 if (strlen((char *)priv->now_data_hold->call_display) == 0) {
190                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_num);
191                 } else {
192                         edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_display);
193                 }
194
195                 /* on hold callback */
196                 if (priv->ic_onhold) {
197                         evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb);
198                 }
199                 evas_object_smart_callback_add(priv->ic_onhold, "clicked", _vcui_swap_btn_cb, vd);
200
201                 /* enter conf list view */
202                 if (priv->ic_incall) {
203                         evas_object_smart_callback_del(priv->ic_incall, "clicked", _vcui_conf_img_cb);
204                 }
205                 evas_object_smart_callback_add(priv->ic_incall, "clicked", _vcui_conf_img_cb, vd);
206         } else {
207                 CALL_UI_DEBUG("[=========== ERROR : Invalid Status!!! ============]");
208                 return;
209         }
210
211         elm_icon_file_set(play_ic, PLAY_ICON, NULL);
212         elm_icon_file_set(pause_ic, PAUSE_ICON, NULL);
213
214         elm_icon_file_set(more_ic, MORE_ICON, NULL);
215         evas_object_smart_callback_add(more_ic, "clicked", __vcui_more_btn_cb, vd);
216
217         _vcui_view_common_set_each_time(priv->now_data_unhold->start_time);
218
219         edje_object_part_text_set(_EDJ(eo), "txt_onhold", _("IDS_CALL_BODY_ON_HOLD_ABB"));
220
221         if ((_vcui_doc_get_count_unhold() == 5 && _vcui_doc_get_count_hold() == 1) || (_vcui_doc_get_count_unhold() == 1 && _vcui_doc_get_count_hold() == 5)) {
222                 _vcui_create_top_right_button_disabled(vd);
223         } else {
224                 _vcui_create_top_right_button(vd);
225         }
226
227         _vcui_create_top_left_button(vd);
228         _vcui_create_bottom_left_button(vd);
229         _vcui_create_bottom_middle_button(vd);
230         if ((_vcui_is_phonelock_status() == EINA_TRUE)&&(_vcui_is_idle_lock() == EINA_TRUE)) {
231                 _vcui_create_top_middle_button_disabled(vd);
232                 _vcui_create_bottom_right_button_disabled(vd);
233         } else {
234                 _vcui_create_top_middle_button(vd);
235                 _vcui_create_bottom_right_button(vd);
236         }
237         _vcui_create_button_bigend(vd);
238
239         ad->beffect_needed = EINA_FALSE;
240
241         evas_object_show(eo);
242 }
243
244 static Evas_Object *__vcui_view_multi_call_split_create_contents(void *data, char *group)
245 {
246         if (data == NULL) {
247                 CALL_UI_DEBUG("ERROR");
248                 return NULL;
249         }
250         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
251
252         Evas_Object *eo = NULL;
253
254         /* load edje */
255         eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group);
256         if (eo == NULL)
257                 return NULL;
258
259         return eo;
260 }
261
262 static Evas_Object *__vcui_view_multi_call_split_create_layout_main(Evas_Object *parent)
263 {
264         if (parent == NULL) {
265                 CALL_UI_DEBUG("ERROR");
266                 return NULL;
267         }
268
269         Evas_Object *ly;
270         ly = elm_layout_add(parent);
271         retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
272
273         elm_layout_theme_set(ly, "standard", "window", "integration");
274         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
275         elm_win_resize_object_add(parent, ly);
276
277         edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
278         edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
279         evas_object_show(ly);
280
281         return ly;
282 }
283
284 static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
285 {
286         CALL_UI_DEBUG("multi-split view create");
287
288         voice_call_view_data_t *vd = view_data;
289         vcui_app_call_data_t *ad = vd->app_data;
290
291         if (!vd->layout) {
292                 vd->layout = __vcui_view_multi_call_split_create_layout_main(vd->app_data->win_main);
293                 if (vd->layout == NULL) {
294                         CALL_UI_DEBUG("ERROR");
295                         return VC_ERROR;
296                 }
297         } else {
298                 CALL_UI_DEBUG("[UI]ad->layout_incall==NULL case ");
299                 evas_object_show(vd->layout);
300         }
301
302         __vcui_view_multi_call_split_onshow(view_data);
303         return VC_NO_ERROR;
304 }
305
306 static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
307 {
308         CALL_UI_DEBUG("multi-split view update");
309
310         __vcui_view_multi_call_split_onshow(view_data);
311         return VC_NO_ERROR;
312 }
313
314 static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data)
315 {
316         CALL_UI_DEBUG("multi-split view hide");
317
318         evas_object_hide(view_data->layout);
319         return VC_NO_ERROR;
320 }
321
322 static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data)
323 {
324         CALL_UI_DEBUG("multi-split view show");
325
326         incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)view_data->priv;
327         vcui_app_call_data_t *ad = view_data->app_data;
328
329         if (priv->contents) {
330                 evas_object_del(priv->contents);
331                 priv->contents = NULL;
332         }
333
334         CALL_UI_DEBUG("bswapped(%d)",ad->bswapped);
335         if (ad->bswapped == 1) {
336                 priv->contents = __vcui_view_multi_call_split_create_contents(view_data, GRP_MULTICALL_SPLIT2);
337         } else {
338                 priv->contents = __vcui_view_multi_call_split_create_contents(view_data, GRP_MULTICALL_SPLIT);
339         }
340         elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents);
341         evas_object_name_set(priv->contents, "MULTIVIEWSPLIT");
342         CALL_UI_DEBUG("[========== MULTIVIEWSPLIT: priv->contents Addr : [%p] ==========]", priv->contents);
343
344         __vcui_view_multi_call_split_draw_screen(priv->contents, view_data);
345
346         evas_object_hide(view_data->layout);
347
348         double scale_factor = 0.0;
349         if (ad->bswapped == 1) {
350                 edje_object_signal_emit(_EDJ(priv->contents), "set-portrait", "incall-split2-view");
351                 if (_vcui_doc_get_count_unhold() > 1 && _vcui_doc_get_count_hold() == 1) {
352                         CALL_UI_DEBUG("show-more-portrait mode signal emit");
353                         edje_object_signal_emit(_EDJ(priv->contents), "show-more-portrait", "incall-split2-conf-call");
354                 }
355         }
356         else {
357                 edje_object_signal_emit(_EDJ(priv->contents), "set-portrait", "incall-split1-view");
358                 if (_vcui_doc_get_count_hold() > 1 && _vcui_doc_get_count_unhold() == 1) {
359                         CALL_UI_DEBUG("show-more-portrait mode signal emit");
360                         edje_object_signal_emit(_EDJ(priv->contents), "show-more-portrait", "incall-split1-conf-call");
361                 }
362         }
363
364         scale_factor = elm_config_scale_get();
365         CALL_UI_DEBUG("scale_factor %f", scale_factor);
366         if (scale_factor == 1.0) {
367                 edje_object_signal_emit(_EDJ(priv->contents), "show-swl-dim-hd", "cid-hd");
368         } else {
369                 edje_object_signal_emit(_EDJ(priv->contents), "show-swl-dim-wvga", "cid-wvga");
370         }
371         evas_object_show(view_data->layout);
372         return VC_NO_ERROR;
373 }
374
375 static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data)
376 {
377         CALL_UI_DEBUG("multi-split view destroy");
378
379         vcui_app_call_data_t *ad = _vcui_get_app_data();
380         voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW];
381
382         incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv;
383         if (priv != NULL) {
384                 if (priv->contents) {
385                         evas_object_del(priv->contents);
386                         priv->contents = NULL;
387                 }
388                 free(priv);
389                 priv = NULL;
390         }
391
392         if (vd->layout != NULL) {
393                 evas_object_hide(vd->layout);
394                 evas_object_del(vd->layout);
395                 vd->layout = NULL;
396         }
397         ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW] = NULL;
398
399         _vcui_cache_flush();
400
401         return VC_NO_ERROR;
402 }