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-view-elements.h"
20 #include "vcui-view-multi-call-split.h"
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);
28 static voice_call_view_data_t s_view = {
29 .type = VIEW_INCALL_MULTICALL_SPLIT_VIEW,
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,
40 voice_call_view_data_t *_vcui_view_multi_call_split_new(vcui_app_call_data_t *ad)
43 s_view.priv = calloc(1, sizeof(incall_multi_view_split_priv_t));
46 CALL_UI_DEBUG("ERROR!!!!!!!!!!!");
52 static void __vcui_more_btn_cb(void *data, Evas_Object *obj, void *event_info)
55 _vcui_view_change(VIEW_INCALL_MULTICALL_LIST_VIEW, 0, 0, 0);
58 static void __vcui_view_multi_call_split_draw_screen(Evas_Object *eo, void *data)
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;
65 vcui_app_call_data_t *ad = vd->app_data;
72 Evas_Object *pause_ic;
75 priv->now_data_hold = _vcui_doc_get_last_status(CALL_HOLD);
76 priv->now_data_unhold = _vcui_doc_get_last_status(CALL_UNHOLD);
78 if ((priv->now_data_hold == NULL) || (priv->now_data_unhold == NULL)) {
79 CALL_UI_DEBUG("call data is null");
83 sw1 = edje_object_part_swallow_get(_EDJ(eo), "swl_cid_1");
85 edje_object_part_unswallow(_EDJ(eo), sw1);
88 sw2 = edje_object_part_swallow_get(_EDJ(eo), "swl_cid_2");
90 edje_object_part_unswallow(_EDJ(eo), sw2);
93 sw3 = edje_object_part_swallow_get(_EDJ(eo), "txt_call_name_1");
95 edje_object_part_unswallow(_EDJ(eo), sw3);
98 sw4 = edje_object_part_swallow_get(_EDJ(eo), "txt_call_name_2");
100 edje_object_part_unswallow(_EDJ(eo), sw4);
101 evas_object_del(sw4);
103 play_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_play");
105 edje_object_part_unswallow(_EDJ(eo), play_ic);
106 evas_object_del(play_ic);
108 pause_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_pause");
110 edje_object_part_unswallow(_EDJ(eo), pause_ic);
111 evas_object_del(pause_ic);
113 more_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_more");
115 edje_object_part_unswallow(_EDJ(eo), more_ic);
116 evas_object_del(more_ic);
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);
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);
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);
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);
137 _vcui_show_wallpaper_image(priv->contents);
138 if (_vcui_doc_get_count_unhold() == 1 && _vcui_doc_get_count_hold() == 1) {
140 elm_icon_file_set(priv->ic_incall, (char *)priv->now_data_unhold->call_file_path, NULL);
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);
145 edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_display);
149 elm_icon_file_set(priv->ic_onhold, (char *)priv->now_data_hold->call_file_path, NULL);
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);
154 edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_display);
157 /* on hold callback */
158 if (priv->ic_onhold) {
159 evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb);
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) {
164 elm_icon_file_set(priv->ic_incall, (char *)priv->now_data_unhold->call_file_path, NULL);
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);
169 edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_display);
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"));
176 /* on hold callback */
177 if (priv->ic_onhold) {
178 evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb);
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) {
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"));
187 elm_icon_file_set(priv->ic_onhold, (char *)priv->now_data_hold->call_file_path, NULL);
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);
192 edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_display);
195 /* on hold callback */
196 if (priv->ic_onhold) {
197 evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb);
199 evas_object_smart_callback_add(priv->ic_onhold, "clicked", _vcui_swap_btn_cb, vd);
201 /* enter conf list view */
202 if (priv->ic_incall) {
203 evas_object_smart_callback_del(priv->ic_incall, "clicked", _vcui_conf_img_cb);
205 evas_object_smart_callback_add(priv->ic_incall, "clicked", _vcui_conf_img_cb, vd);
207 CALL_UI_DEBUG("[=========== ERROR : Invalid Status!!! ============]");
211 elm_icon_file_set(play_ic, PLAY_ICON, NULL);
212 elm_icon_file_set(pause_ic, PAUSE_ICON, NULL);
214 elm_icon_file_set(more_ic, MORE_ICON, NULL);
215 evas_object_smart_callback_add(more_ic, "clicked", __vcui_more_btn_cb, vd);
217 _vcui_view_common_set_each_time(priv->now_data_unhold->start_time);
219 edje_object_part_text_set(_EDJ(eo), "txt_onhold", _("IDS_CALL_BODY_ON_HOLD_ABB"));
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);
224 _vcui_create_top_right_button(vd);
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);
234 _vcui_create_top_middle_button(vd);
235 _vcui_create_bottom_right_button(vd);
237 _vcui_create_button_bigend(vd);
239 ad->beffect_needed = EINA_FALSE;
241 evas_object_show(eo);
244 static Evas_Object *__vcui_view_multi_call_split_create_contents(void *data, char *group)
247 CALL_UI_DEBUG("ERROR");
250 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
252 Evas_Object *eo = NULL;
255 eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group);
262 static Evas_Object *__vcui_view_multi_call_split_create_layout_main(Evas_Object *parent)
264 if (parent == NULL) {
265 CALL_UI_DEBUG("ERROR");
270 ly = elm_layout_add(parent);
271 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
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);
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);
284 static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
286 CALL_UI_DEBUG("multi-split view create");
288 voice_call_view_data_t *vd = view_data;
289 vcui_app_call_data_t *ad = vd->app_data;
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");
298 CALL_UI_DEBUG("[UI]ad->layout_incall==NULL case ");
299 evas_object_show(vd->layout);
302 __vcui_view_multi_call_split_onshow(view_data);
306 static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
308 CALL_UI_DEBUG("multi-split view update");
310 __vcui_view_multi_call_split_onshow(view_data);
314 static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data)
316 CALL_UI_DEBUG("multi-split view hide");
318 evas_object_hide(view_data->layout);
322 static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data)
324 CALL_UI_DEBUG("multi-split view show");
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;
329 if (priv->contents) {
330 evas_object_del(priv->contents);
331 priv->contents = NULL;
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);
338 priv->contents = __vcui_view_multi_call_split_create_contents(view_data, GRP_MULTICALL_SPLIT);
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);
344 __vcui_view_multi_call_split_draw_screen(priv->contents, view_data);
346 evas_object_hide(view_data->layout);
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");
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");
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");
369 edje_object_signal_emit(_EDJ(priv->contents), "show-swl-dim-wvga", "cid-wvga");
371 evas_object_show(view_data->layout);
375 static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data)
377 CALL_UI_DEBUG("multi-split view destroy");
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];
382 incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv;
384 if (priv->contents) {
385 evas_object_del(priv->contents);
386 priv->contents = NULL;
392 if (vd->layout != NULL) {
393 evas_object_hide(vd->layout);
394 evas_object_del(vd->layout);
397 ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW] = NULL;