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-list.h"
22 static Elm_Genlist_Item_Class *itc_call;
24 #define VCUI_VIEW_MULTICALL_LIST_LAYOUT_ID "MULTIVIEWLIST"
27 Evas_Object *contents;
30 Evas_Object *record_btn;
31 vcui_app_call_status_t call_status;
32 Evas_Object *multibox_gl;
34 } vcui_view_multi_call_list_priv_t;
36 static int __vcui_view_multi_call_list_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
37 static int __vcui_view_multi_call_list_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
38 static int __vcui_view_multi_call_list_onhide(voice_call_view_data_t *view_data);
39 static int __vcui_view_multi_call_list_onshow(voice_call_view_data_t *view_data);
40 static int __vcui_view_multi_call_list_ondestroy(voice_call_view_data_t *view_data);
42 static voice_call_view_data_t s_view = {
43 .type = VIEW_INCALL_MULTICALL_LIST_VIEW,
46 .onCreate = __vcui_view_multi_call_list_oncreate,
47 .onUpdate = __vcui_view_multi_call_list_onupdate,
48 .onHide = __vcui_view_multi_call_list_onhide,
49 .onShow = __vcui_view_multi_call_list_onshow,
50 .onDestroy = __vcui_view_multi_call_list_ondestroy,
54 voice_call_view_data_t *_vcui_view_multi_call_list_new(vcui_app_call_data_t *ad)
57 s_view.priv = calloc(1, sizeof(vcui_view_multi_call_list_priv_t));
60 CALL_UI_DEBUG("ERROR ");
66 static void __vcui_view_multi_call_list_small_end_call_cb(void *data, Evas_Object *obj, void *event_info)
69 vcui_app_call_data_t *ad = _vcui_get_app_data();
70 call_data_t *call_data = data;
71 int handle = _vcui_doc_get_call_handle(call_data);
72 vcall_engine_release_call_by_handle(handle);
73 ad->call_end_type = CALL_END_TYPE_NONE;
75 _vcui_view_popup_load_endcall_time(call_data);
78 static void __vcui_view_multi_call_list_split_call_cb(void *data, Evas_Object *obj, void *event_info)
81 call_data_t *call_data = data;
82 int handle = _vcui_doc_get_call_handle(call_data);
83 vcall_engine_split_call(handle);
86 static void __vcui_view_multi_call_list_gl_sel_call(void *data, Evas_Object *obj, void *event_info)
90 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
92 elm_object_item_data_get(item);
93 elm_genlist_item_selected_set(item, 0);
96 static void __vcui_view_multi_call_list_gl_del_call(void *data, Evas_Object *obj)
102 static Eina_Bool __vcui_view_multi_call_list_gl_state_get_call(void *data, Evas_Object *obj, const char *part)
108 static Evas_Object *__vcui_view_multi_call_list_gl_icon_get_call(void *data, Evas_Object *obj, const char *part)
110 call_data_t *call_data = (call_data_t *)data;
112 Evas_Object *icon = NULL;
113 Evas_Object *btn = NULL;
115 if (strcmp(part, "elm.swallow.end") == 0) {
116 btn = elm_button_add(obj);
117 elm_object_style_set(btn, "style_call_icon_only_end");
118 icon = elm_image_add(obj);
119 elm_image_file_set(icon, CONF_CALL_END_ICON, NULL);
120 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
121 elm_image_resizable_set(icon, 1, 1);
122 elm_object_content_set(btn, icon);
124 evas_object_smart_callback_add(btn, "clicked", __vcui_view_multi_call_list_small_end_call_cb, call_data);
125 evas_object_propagate_events_set(btn, EINA_FALSE);
128 } else if (strcmp(part, "elm.swallow.private") == 0) {
129 if (_vcui_doc_get_hold_call_data_count() > 0) {
132 btn = elm_button_add(obj);
133 icon = elm_image_add(obj);
134 elm_image_file_set(icon, PRIVATE_ICON, NULL);
135 elm_object_style_set(btn, "style_call_icon_only_private");
137 elm_image_resizable_set(icon, 1, 1);
138 elm_object_content_set(btn, icon);
140 evas_object_smart_callback_add(btn, "clicked", __vcui_view_multi_call_list_split_call_cb, call_data);
141 evas_object_propagate_events_set(btn, EINA_FALSE);
149 static char *__vcui_view_multi_call_list_gl_label_get_call(void *data, Evas_Object *obj, const char *part)
151 char buf[DEF_BUF_LEN] = { 0, };
152 call_data_t *call_data = (call_data_t *)data;
153 char *call_number = _vcui_doc_get_call_number(call_data);
154 char *call_name = _vcui_doc_get_call_display_name(call_data);
156 if (strcmp(part, "elm.text") == 0) {
157 if (strlen(call_name) == 0) {
158 snprintf(buf, sizeof(buf), "%s", call_number);
160 snprintf(buf, sizeof(buf), "%s", call_name);
167 static void __vcui_view_multi_call_list_genlist_init(void *data)
169 itc_call = elm_genlist_item_class_new();
171 itc_call->item_style = "multicall_list";
172 itc_call->func.text_get = __vcui_view_multi_call_list_gl_label_get_call;
173 itc_call->func.content_get = __vcui_view_multi_call_list_gl_icon_get_call;
174 itc_call->func.state_get = __vcui_view_multi_call_list_gl_state_get_call;
175 itc_call->func.del = __vcui_view_multi_call_list_gl_del_call;
178 static void __vcui_view_multi_call_list_genlist_add(void *data)
180 voice_call_view_data_t *vd = data;
181 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
182 Evas_Object *genlist = NULL;
184 genlist = elm_genlist_add(priv->contents);
185 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
186 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
188 elm_object_part_content_set(priv->contents, "swl_calllist", genlist);
189 priv->multibox_gl = genlist;
192 void __vcui_view_multi_call_list_genlist_item_append(void *data)
195 voice_call_view_data_t *vd = data;
196 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
197 Eina_List *list = NULL;
199 if (priv->multibox_gl) {
200 elm_genlist_clear(priv->multibox_gl);
203 if (priv->call_status == CALL_UNHOLD) {
204 list = _vcui_doc_get_caller_list_with_unhold_status();
206 list = _vcui_doc_get_caller_list_with_hold_status();
209 CALL_UI_DEBUG("error");
214 call_data_t *call_data = NULL;
215 EINA_LIST_FOREACH(list, l, call_data) {
216 elm_genlist_item_append(priv->multibox_gl, itc_call, (void *)call_data, NULL, ELM_GENLIST_ITEM_NONE, __vcui_view_multi_call_list_gl_sel_call, data);
218 eina_list_free(list);
221 static void __vcui_view_multi_call_list_back_cb(void *data, Evas_Object *obj, void *event_info)
224 _vcui_view_auto_change();
227 static void __vcui_view_multi_call_list_draw_screen(void *data)
231 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
232 vcui_app_call_data_t *ad = vd->app_data;
233 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
234 call_data_t *call_data = NULL;
236 priv->total_members = _vcui_doc_get_hold_call_data_count() + _vcui_doc_get_unhold_call_data_count();
237 priv->call_status = _vcui_doc_get_group_call_status();
238 call_data = _vcui_doc_get_call_data_by_call_status(priv->call_status);
239 if (call_data == NULL) {
240 CALL_UI_DEBUG("call data is null");
243 _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data));
245 elm_win_rotation_with_resize_set(ad->win_main, ad->rotate_angle);
246 elm_win_rotation_with_resize_set(ad->popup_mw, ad->rotate_angle);
248 if (ad->rotate_angle == 0 || ad->rotate_angle == 180) {
249 CALL_UI_DEBUG("create portrait mode layout items");
251 __vcui_view_multi_call_list_genlist_item_append(vd);
253 _vcui_create_conf_list_button_hold(vd);
254 _vcui_create_button_bigend(vd);
255 } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) {
256 CALL_UI_DEBUG("landscape mode not supported");
258 evas_object_show(priv->contents);
261 static Evas_Object *__vcui_view_multi_call_list_create_naviframe(Evas_Object *parent)
263 if (parent == NULL) {
264 CALL_UI_DEBUG("ERROR");
268 Evas_Object *nf = elm_naviframe_add(parent);
269 retvm_if(nf == NULL, NULL, "Failed elm_naviframe_add.");
271 elm_object_part_content_set(parent, "elm.swallow.content", nf);
272 evas_object_show(nf);
277 static Evas_Object *__vcui_view_multi_call_list_create_contents(Evas_Object *parent, char *group)
281 if (parent == NULL) {
282 CALL_UI_DEBUG("ERROR");
287 eo = _vcui_load_edj(parent, EDJ_NAME, group);
294 static Evas_Object *__vcui_view_multi_call_list_create_layout_main(Evas_Object *parent)
296 if (parent == NULL) {
297 CALL_UI_DEBUG("ERROR");
302 ly = elm_layout_add(parent);
303 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
305 elm_layout_theme_set(ly, "layout", "application", "default");
306 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
307 elm_win_resize_object_add(parent, ly);
309 elm_win_indicator_mode_set(ly, ELM_WIN_INDICATOR_SHOW);
310 evas_object_show(ly);
315 static int __vcui_view_multi_call_list_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
317 CALL_UI_DEBUG("multicall-list view create");
319 voice_call_view_data_t *vd = view_data;
322 vd->layout = __vcui_view_multi_call_list_create_layout_main(vd->app_data->win_main);
323 if (vd->layout == NULL) {
324 CALL_UI_DEBUG("ERROR");
328 CALL_UI_DEBUG("[UI]ad->layout_multicall != NULL case ");
329 evas_object_show(vd->layout);
332 __vcui_view_multi_call_list_onshow(view_data);
337 static int __vcui_view_multi_call_list_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
339 CALL_UI_DEBUG("multicall-list view update");
341 __vcui_view_multi_call_list_onshow(view_data);
345 static int __vcui_view_multi_call_list_onhide(voice_call_view_data_t *view_data)
347 CALL_UI_DEBUG("multicall-list view hide");
349 evas_object_hide(view_data->layout);
353 static int __vcui_view_multi_call_list_onshow(voice_call_view_data_t *view_data)
355 CALL_UI_DEBUG("multicall-list view show");
357 vcui_app_call_data_t *ad = view_data->app_data;
358 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)view_data->priv;
359 Evas_Object *back_btn = NULL;
360 Elm_Object_Item *item = NULL;
364 evas_object_del(priv->cid_ly);
368 if (priv->contents) {
369 evas_object_del(priv->contents);
370 priv->contents = NULL;
374 evas_object_del(priv->nf);
378 /* Create naviframe layout */
379 priv->nf = __vcui_view_multi_call_list_create_naviframe(view_data->layout);
381 if (ad->rotate_angle == 0 || ad->rotate_angle == 180) {
382 CALL_UI_DEBUG("portrait mode layout");
383 priv->contents = __vcui_view_multi_call_list_create_contents(priv->nf, GRP_MULTICALL);
385 __vcui_view_multi_call_list_genlist_add(view_data);
386 __vcui_view_multi_call_list_genlist_init(view_data);
388 } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) {
389 CALL_UI_DEBUG("landscape mode not supported");
392 back_btn = elm_button_add(priv->nf);
393 elm_object_style_set(back_btn, "naviframe/end_btn/default");
394 evas_object_smart_callback_add(back_btn, "clicked", __vcui_view_multi_call_list_back_cb, view_data);
396 item = elm_naviframe_item_push(priv->nf, _("IDS_CALL_OPT_CONFERENCE_CALL"), back_btn, NULL, priv->contents, NULL);
398 evas_object_name_set(priv->contents, VCUI_VIEW_MULTICALL_LIST_LAYOUT_ID);
399 CALL_UI_DEBUG("[========== MULTIVIEWLIST: priv->contents Addr : [%p] ==========]", priv->contents);
401 __vcui_view_multi_call_list_draw_screen(view_data);
403 evas_object_hide(view_data->layout);
404 evas_object_show(view_data->layout);
408 static int __vcui_view_multi_call_list_ondestroy(voice_call_view_data_t *view_data)
410 CALL_UI_DEBUG("multicall-list view destroy");
412 vcui_app_call_data_t *ad = _vcui_get_app_data();
414 voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_LIST_VIEW];
415 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
418 elm_genlist_item_class_free(itc_call);
421 if (priv->multibox_gl != NULL) {
422 elm_genlist_clear(priv->multibox_gl);
423 evas_object_del(priv->multibox_gl);
424 priv->multibox_gl = NULL;
428 evas_object_del(priv->cid_ly);
432 if (priv->contents) {
433 evas_object_del(priv->contents);
434 priv->contents = NULL;
438 evas_object_del(priv->nf);
446 if (vd->layout != NULL) {
447 evas_object_hide(vd->layout);
448 evas_object_del(vd->layout);
452 ad->view_st[VIEW_INCALL_MULTICALL_LIST_VIEW] = NULL;
455 CALL_UI_DEBUG("complete destroy multi view list");
459 int _vcui_view_multi_call_list_check_valid_eo(voice_call_view_data_t *vd)
463 vcui_view_multi_call_list_priv_t *priv = NULL;
466 VCUI_RETURN_VALUE_IF_FAIL(vd , -1);
467 priv = (vcui_view_multi_call_list_priv_t *) vd->priv;
469 valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_MULTICALL_LIST_LAYOUT_ID);
474 Evas_Object *_vcui_view_multi_call_list_get_main_layout(voice_call_view_data_t *vd)
477 vcui_view_multi_call_list_priv_t *priv = NULL;
479 VCUI_RETURN_NULL_IF_FAIL(vd);
480 priv = (vcui_view_multi_call_list_priv_t *) vd->priv;
482 VCUI_RETURN_NULL_IF_FAIL(priv);
483 return priv->contents;
486 int _vcui_view_multi_call_list_get_call_status(voice_call_view_data_t *vd)
489 vcui_view_multi_call_list_priv_t *priv = NULL;
492 VCUI_RETURN_INVALID_IF_FAIL(vd);
493 priv = (vcui_view_multi_call_list_priv_t *) vd->priv;
495 VCUI_RETURN_INVALID_IF_FAIL(priv);
496 if (priv->call_status == CALL_HOLD) {
497 call_status = CALL_HOLD;
499 call_status = CALL_UNHOLD;
505 void _vcui_view_multi_call_list_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur)
507 vcui_view_multi_call_list_priv_t *priv = NULL;
509 VCUI_RETURN_IF_FAIL(vd);
510 priv = (vcui_view_multi_call_list_priv_t *) vd->priv;
512 VCUI_RETURN_IF_FAIL(priv);
513 edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(pcall_dur));
516 Evas_Object *_vcui_view_multi_call_list_get_cid_layout(voice_call_view_data_t *vd)
519 vcui_view_multi_call_list_priv_t *priv = NULL;
521 VCUI_RETURN_NULL_IF_FAIL(vd);
522 priv = (vcui_view_multi_call_list_priv_t *) vd->priv;
524 VCUI_RETURN_NULL_IF_FAIL(priv);
528 int _vcui_view_multi_call_list_get_total_members(voice_call_view_data_t *vd)
531 vcui_view_multi_call_list_priv_t *priv = NULL;
533 VCUI_RETURN_INVALID_IF_FAIL(vd);
534 priv = (vcui_view_multi_call_list_priv_t *) vd->priv;
536 VCUI_RETURN_INVALID_IF_FAIL(priv);
538 return priv->total_members;