2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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.
18 #include "vcui-application.h"
19 #include "vcui-document.h"
20 #include "vcui-view-elements.h"
21 #include "vcui-view-multi-call-split.h"
22 #include "vcui-view-keypad.h"
24 #define VCUI_VIEW_MULTICALL_SPLIT_LAYOUT_ID "MULTIVIEWSPLIT"
26 Evas_Object *contents;
27 Evas_Object *caller_info_unhold;
28 Evas_Object *caller_info_hold;
31 Evas_Object *record_btn;
33 } incall_multi_view_split_priv_t;
35 static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
36 static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
37 static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data);
38 static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data);
39 static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data);
40 static void __vcui_multi_view_split_rotation_with_resize();
42 static voice_call_view_data_t s_view = {
43 .type = VIEW_INCALL_MULTICALL_SPLIT_VIEW,
46 .onCreate = __vcui_view_multi_call_split_oncreate,
47 .onUpdate = __vcui_view_multi_call_split_onupdate,
48 .onHide = __vcui_view_multi_call_split_onhide,
49 .onShow = __vcui_view_multi_call_split_onshow,
50 .onDestroy = __vcui_view_multi_call_split_ondestroy,
54 voice_call_view_data_t *_vcui_view_multi_call_split_new(vcui_app_call_data_t *ad)
57 s_view.priv = calloc(1, sizeof(incall_multi_view_split_priv_t));
60 CALL_UI_DEBUG("ERROR!!!!!!!!!!!");
66 static void __vcui_view_multi_call_split_draw_screen(Evas_Object *eo, void *data)
70 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
71 incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv;
73 vcui_app_call_data_t *ad = vd->app_data;
75 call_data_t *hold_call_data = NULL;
76 call_data_t *unhold_call_data = NULL;
78 char buf[DEF_BUF_LEN] = { 0, };
80 hold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_HOLD);
81 unhold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_UNHOLD);
83 if ((hold_call_data == NULL) || (unhold_call_data == NULL)) {
84 CALL_UI_DEBUG("call data is null");
88 char *hold_file_path = _vcui_doc_get_caller_id_file_path(hold_call_data);
89 char *hold_full_file_path = _vcui_doc_get_caller_id_full_file_path(hold_call_data);
90 char *unhold_file_path = _vcui_doc_get_caller_id_file_path(unhold_call_data);
91 char *unhold_full_file_path = _vcui_doc_get_caller_id_full_file_path(unhold_call_data);
92 char *hold_call_number = _vcui_doc_get_call_number(hold_call_data);
93 char *hold_call_name = _vcui_doc_get_call_display_name(hold_call_data);
94 char *unhold_call_number = _vcui_doc_get_call_number(unhold_call_data);
95 char *unhold_call_name = _vcui_doc_get_call_display_name(unhold_call_data);
97 if (_vcui_doc_get_unhold_call_data_count() == 1 && _vcui_doc_get_hold_call_data_count() == 1) {
99 _vcui_show_contact_image_split(eo, unhold_file_path, unhold_full_file_path, EINA_FALSE);
101 if (strlen(unhold_call_name) == 0) {
102 _vcui_show_caller_info_name(vd, unhold_call_number, EINA_FALSE);
103 _vcui_show_caller_info_number(vd, NULL, EINA_FALSE);
105 _vcui_show_caller_info_name(vd, unhold_call_name, EINA_FALSE);
106 _vcui_show_caller_info_number(vd, unhold_call_number, EINA_FALSE);
110 _vcui_show_contact_image_split(eo, hold_file_path, hold_full_file_path, EINA_TRUE);
111 if (strlen(hold_call_name) == 0) {
112 _vcui_show_caller_info_name(vd, hold_call_number, EINA_TRUE);
113 _vcui_show_caller_info_number(vd, NULL, EINA_TRUE);
115 _vcui_show_caller_info_name(vd, hold_call_name, EINA_TRUE);
116 _vcui_show_caller_info_number(vd, hold_call_number, EINA_TRUE);
119 } else if (_vcui_doc_get_unhold_call_data_count() == 1 && _vcui_doc_get_hold_call_data_count() > 1) {
121 _vcui_show_contact_image_split(eo, hold_file_path, hold_full_file_path, EINA_FALSE);
123 if (strlen(unhold_call_name) == 0) {
124 _vcui_show_caller_info_name(vd, unhold_call_number, EINA_FALSE);
125 _vcui_show_caller_info_number(vd, NULL, EINA_FALSE);
127 _vcui_show_caller_info_name(vd, unhold_call_name, EINA_FALSE);
128 _vcui_show_caller_info_number(vd, unhold_call_number, EINA_FALSE);
132 _vcui_show_contact_image_split(eo, CONF_SPLIT_ICON, CONF_SPLIT_ICON, EINA_TRUE);
133 _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_TRUE);
134 snprintf(buf, DEF_BUF_LEN, "%d %s", _vcui_doc_get_hold_call_data_count(), _("IDS_CALL_BODY_PEOPLE"));
135 _vcui_show_caller_info_number(vd, buf, EINA_TRUE);
137 } else if (_vcui_doc_get_unhold_call_data_count() > 1 && _vcui_doc_get_hold_call_data_count() == 1) {
139 _vcui_show_contact_image_split(eo, CONF_SPLIT_ICON, CONF_SPLIT_ICON, EINA_FALSE);
140 _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_FALSE);
141 snprintf(buf, DEF_BUF_LEN, "%d %s", _vcui_doc_get_unhold_call_data_count(), _("IDS_CALL_BODY_PEOPLE"));
142 _vcui_show_caller_info_number(vd, buf, EINA_FALSE);
145 _vcui_show_contact_image_split(eo, hold_file_path, hold_full_file_path, EINA_TRUE);
146 if (strlen(hold_call_name) == 0) {
147 _vcui_show_caller_info_name(vd, hold_call_number, EINA_TRUE);
148 _vcui_show_caller_info_number(vd, NULL, EINA_TRUE);
150 _vcui_show_caller_info_name(vd, hold_call_name, EINA_TRUE);
151 _vcui_show_caller_info_number(vd, hold_call_number, EINA_TRUE);
154 /* enter conf list view */
156 CALL_UI_DEBUG("[=========== ERROR : Invalid Status!!! ============]");
160 _vcui_show_call_bg_img(priv->contents);
161 _vcui_show_caller_info_status(vd, _("IDS_CALL_BODY_ON_HOLD_ABB"), EINA_TRUE);
163 _vcui_show_caller_info_icon(vd, EINA_FALSE);
165 _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(unhold_call_data));
167 /*create a small button for Hold/Swap*/
168 _vcui_create_hold_swap_button(vd);
170 if ((_vcui_is_phonelock_status() == EINA_TRUE) && (_vcui_is_idle_lock() == EINA_TRUE)) {
171 _vcui_create_top_middle_button_disabled(vd);
173 _vcui_create_top_middle_button(vd);
176 _vcui_create_top_right_button(vd);
177 _vcui_create_bottom_left_button(vd);
178 _vcui_create_bottom_middle_button(vd);
181 if ((_vcui_doc_get_unhold_call_data_count() == 5 && _vcui_doc_get_hold_call_data_count() == 1)
182 || (_vcui_doc_get_unhold_call_data_count() == 1 && _vcui_doc_get_hold_call_data_count() == 5)) {
183 _vcui_create_top_left_button_disabled(vd);
185 _vcui_create_top_left_button(vd);
187 if (_vcui_view_common_is_emul_bin() == EINA_TRUE) {
188 _vcui_create_bottom_right_button_disabled(vd);
190 _vcui_create_bottom_right_button(vd);
194 ad->beffect_needed = EINA_FALSE;
196 __vcui_multi_view_split_rotation_with_resize();
198 _vcui_elements_check_keypad_n_hide(vd);
200 evas_object_show(eo);
203 static Evas_Object *__vcui_view_multi_call_split_create_contents(void *data, char *group)
206 CALL_UI_DEBUG("ERROR");
209 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
211 Evas_Object *eo = NULL;
214 eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group);
221 static Evas_Object *__vcui_view_multi_call_split_create_layout_main(Evas_Object *parent)
223 if (parent == NULL) {
224 CALL_UI_DEBUG("ERROR");
229 ly = elm_layout_add(parent);
230 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
232 elm_layout_theme_set(ly, "standard", "window", "integration");
233 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
234 elm_win_resize_object_add(parent, ly);
236 edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
237 edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
238 evas_object_show(ly);
243 static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
245 CALL_UI_DEBUG("multi-split view create");
247 voice_call_view_data_t *vd = view_data;
248 incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)view_data->priv;
251 Evas_Object * sep_ly = NULL;
252 vd->layout = __vcui_view_multi_call_split_create_layout_main(vd->app_data->win_main);
253 if (vd->layout == NULL) {
254 CALL_UI_DEBUG("ERROR");
258 priv->contents = __vcui_view_multi_call_split_create_contents(view_data, GRP_MULTICALL_SPLIT);
259 elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents);
261 sep_ly = __vcui_view_multi_call_split_create_contents(view_data, GRP_SEPARATOR_LAYOUT);
262 elm_object_part_content_set(priv->contents, "btn_bg", sep_ly);
264 priv->btn_ly = __vcui_view_multi_call_split_create_contents(view_data, GRP_BUTTON_LAYOUT);
265 elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly);
267 priv->caller_info_unhold = __vcui_view_multi_call_split_create_contents(view_data, GRP_CALLER_INFO);
268 elm_object_part_content_set(priv->contents, "caller_info_unhold", priv->caller_info_unhold);
269 edje_object_signal_emit(_EDJ(priv->caller_info_unhold), "set-unhold-state", "call-screen");
271 priv->caller_info_hold = __vcui_view_multi_call_split_create_contents(view_data, GRP_CALLER_INFO);
272 elm_object_part_content_set(priv->contents, "caller_info_hold", priv->caller_info_hold);
273 edje_object_signal_emit(_EDJ(priv->caller_info_hold), "set-hold-caller_ifno", "call-screen");
275 evas_object_name_set(priv->contents, VCUI_VIEW_MULTICALL_SPLIT_LAYOUT_ID);
276 CALL_UI_DEBUG("[========== MULTIVIEWSPLIT: priv->contents Addr : [%p] ==========]", priv->contents);
279 CALL_UI_DEBUG("[UI]ad->layout_incall==NULL case ");
280 evas_object_show(vd->layout);
283 __vcui_view_multi_call_split_onshow(view_data);
287 static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
289 CALL_UI_DEBUG("multi-split view update");
291 __vcui_view_multi_call_split_onshow(view_data);
295 static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data)
297 CALL_UI_DEBUG("multi-split view hide");
299 evas_object_hide(view_data->layout);
303 static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data)
305 CALL_UI_DEBUG("multi-split view show");
307 incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)view_data->priv;
309 __vcui_view_multi_call_split_draw_screen(priv->contents, view_data);
311 evas_object_hide(view_data->layout);
312 evas_object_show(view_data->layout);
316 static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data)
318 CALL_UI_DEBUG("multi-split view destroy");
320 vcui_app_call_data_t *ad = _vcui_get_app_data();
321 voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW];
323 incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv;
326 evas_object_del(priv->btn_ly);
330 if (priv->caller_info_hold) {
331 evas_object_del(priv->caller_info_hold);
332 priv->caller_info_hold = NULL;
335 if (priv->caller_info_unhold) {
336 evas_object_del(priv->caller_info_unhold);
337 priv->caller_info_unhold = NULL;
340 /*Delete keypad layout*/
341 _vcui_keypad_delete_layout(priv->contents);
343 if (priv->contents) {
344 evas_object_del(priv->contents);
345 priv->contents = NULL;
351 if (vd->layout != NULL) {
352 evas_object_hide(vd->layout);
353 evas_object_del(vd->layout);
356 ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW] = NULL;
363 static void __vcui_multi_view_split_rotation_with_resize()
366 vcui_app_call_data_t *ad = _vcui_get_app_data();
367 voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW];
368 incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv;
370 elm_win_rotation_with_resize_set(ad->win_main, ad->rotate_angle);
371 elm_win_rotation_with_resize_set(ad->popup_mw, ad->rotate_angle);
373 if (ad->rotate_angle == 0 || ad->rotate_angle == 180) {
374 CALL_UI_DEBUG("portrait mode signal emit");
375 edje_object_signal_emit(_EDJ(priv->contents), "set-portrait", "incall-split-view");
376 } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) {
377 CALL_UI_DEBUG("landscape mode not supported");
380 evas_object_show(vd->layout);
383 int _vcui_view_multi_call_split_check_valid_eo(voice_call_view_data_t *vd)
387 incall_multi_view_split_priv_t *priv = NULL;
390 VCUI_RETURN_VALUE_IF_FAIL(vd , -1);
391 priv = (incall_multi_view_split_priv_t *) vd->priv;
393 valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_MULTICALL_SPLIT_LAYOUT_ID);
398 Evas_Object *_vcui_view_multi_call_split_get_layout(voice_call_view_data_t *vd)
401 incall_multi_view_split_priv_t *priv = NULL;
403 VCUI_RETURN_NULL_IF_FAIL(vd);
404 priv = (incall_multi_view_split_priv_t *) vd->priv;
406 VCUI_RETURN_NULL_IF_FAIL(priv);
407 return priv->contents;
410 Evas_Object *_vcui_view_multi_call_split_get_button_layout(voice_call_view_data_t *vd)
413 incall_multi_view_split_priv_t *priv = NULL;
415 VCUI_RETURN_NULL_IF_FAIL(vd);
416 priv = (incall_multi_view_split_priv_t *) vd->priv;
418 VCUI_RETURN_NULL_IF_FAIL(priv);
422 void _vcui_view_multi_call_split_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur)
424 incall_multi_view_split_priv_t *priv = NULL;
426 VCUI_RETURN_IF_FAIL(vd);
427 priv = (incall_multi_view_split_priv_t *) vd->priv;
429 VCUI_RETURN_IF_FAIL(priv);
430 edje_object_part_text_set(_EDJ(priv->caller_info_unhold), "txt_timer", _(pcall_dur));
433 Evas_Object *_vc_ui_view_multi_call_split_get_caller_info_hold(voice_call_view_data_t *vd)
436 incall_multi_view_split_priv_t *priv = NULL;
438 VCUI_RETURN_NULL_IF_FAIL(vd);
439 priv = (incall_multi_view_split_priv_t *) vd->priv;
441 VCUI_RETURN_NULL_IF_FAIL(priv);
442 return priv->caller_info_hold;
445 Evas_Object *_vc_ui_view_multi_call_split_get_caller_info_unhold(voice_call_view_data_t *vd)
448 incall_multi_view_split_priv_t *priv = NULL;
450 VCUI_RETURN_NULL_IF_FAIL(vd);
451 priv = (incall_multi_view_split_priv_t *) vd->priv;
453 VCUI_RETURN_NULL_IF_FAIL(priv);
454 return priv->caller_info_unhold;