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-common.h"
20 #include "vcui-view-callend.h"
21 #include "vcui-view-elements.h"
23 #define VCUI_VIEW_CALLEND_LAYOUT_ID "ENDCALLVIEW"
25 Evas_Object *contents;
26 Evas_Object *caller_info;
28 Evas_Object *ic; /* small size call image */
29 vcui_app_call_status_t call_status;
30 } endcall_view_priv_t;
32 static call_data_t *call_data = NULL;
34 static int __vcui_view_callend_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
35 static int __vcui_view_callend_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
36 static int __vcui_view_callend_onhide(voice_call_view_data_t *view_data);
37 static int __vcui_view_callend_onshow(voice_call_view_data_t *view_data);
38 static int __vcui_view_callend_ondestroy(voice_call_view_data_t *view_data);
40 static voice_call_view_data_t s_view = {
41 .type = VIEW_ENDCALL_VIEW,
44 .onCreate = __vcui_view_callend_oncreate,
45 .onUpdate = __vcui_view_callend_onupdate,
46 .onHide = __vcui_view_callend_onhide,
47 .onShow = __vcui_view_callend_onshow,
48 .onDestroy = __vcui_view_callend_ondestroy,
52 voice_call_view_data_t *_vcui_view_callend_new(vcui_app_call_data_t *ad)
55 s_view.priv = calloc(1, sizeof(endcall_view_priv_t));
58 CALL_UI_DEBUG("ERROR!!!!!!!!!!!");
64 static void __vcui_view_callend_draw_screen(Evas_Object *eo, void *data)
68 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
69 endcall_view_priv_t *priv = (endcall_view_priv_t *)vd->priv;
70 vcui_app_call_data_t *ad = vd->app_data;
72 /* ============ Check valid Evas Object ============= */
74 valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_CALLEND_LAYOUT_ID);
76 CALL_UI_DEBUG("[========== ENDCALLVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
79 /* ============ Check valid Evas Object ============= */
81 if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) {
82 CALL_UI_DEBUG("CALL_END_TYPE_SINGLE_CALL type end screen");
84 char *file_path = _vcui_doc_get_caller_id_file_path(call_data);
85 char *call_number = _vcui_doc_get_call_number(call_data);
86 char *call_name = _vcui_doc_get_call_display_name(call_data);
89 _vcui_delete_contact_image(priv->contents);
90 if (strcmp(file_path, NOIMG_ICON) == 0) {
91 _vcui_show_call_not_saved_bg_img(priv->contents);
92 _vcui_show_default_image(priv->contents, vd->app_data->win_main, CALLER_ID_DEFAULT);
94 _vcui_show_call_bg_img(priv->contents);
96 _vcui_show_wallpaper_image(priv->contents);
97 priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, file_path);
101 _vcui_create_voicecall_button(vd, call_number);
102 _vcui_create_videocall_button(vd, call_number);
103 _vcui_create_message_button(vd, call_number);
105 /* call name (if nothing, call number) */
106 if (strlen(call_name) == 0) {
107 _vcui_show_caller_info_name(vd, call_number, EINA_FALSE);
108 _vcui_create_add_to_contacts_button(vd, call_number);
110 int ct_id = _vcui_doc_get_contact_index(call_data);
111 _vcui_show_caller_info_name(vd, call_name, EINA_FALSE);
112 _vcui_show_caller_info_number(vd, call_number, EINA_FALSE);
113 _vcui_create_view_contact_button(vd, ct_id);
115 _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data));
116 } else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) {
117 CALL_UI_DEBUG("CALL_END_TYPE_CONF_CALL type end screen");
118 char buf[DEF_BUF_LEN] = { 0, };
120 /* Conference image */
121 _vcui_show_wallpaper_image(priv->contents);
122 priv->ic = _vcui_show_default_image(priv->contents, vd->app_data->win_main, CONF_ICON);
123 if (priv->call_status == CALL_HOLD) {
124 CALL_UI_DEBUG("ad->root_w: %d ad->root_h: %d", ad->root_w, ad->root_h);
125 if (ad->root_w == MAIN_WIN_HD_W && ad->root_h == MAIN_WIN_HD_H) {
126 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_HD", "CID_HD");
127 } else if (ad->root_w == MAIN_WIN_WVGA_W && ad->root_h == MAIN_WIN_WVGA_H) {
128 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_WVGA", "CID_WVGA");
131 edje_object_signal_emit(_EDJ(priv->contents), "HIDE_DIM", "CID");
133 _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_FALSE);
134 snprintf(buf, DEF_BUF_LEN, "%d %s", (_vcui_doc_get_hold_call_data_count() + _vcui_doc_get_unhold_call_data_count()), _("IDS_CALL_BODY_PEOPLE"));
135 _vcui_show_caller_info_number(vd, buf, EINA_FALSE);
137 /*create a small button for Hold/Swap*/
138 _vcui_create_hold_swap_button(vd);
140 _vcui_create_top_left_button_disabled(vd);
141 _vcui_create_top_middle_button_disabled(vd);
142 _vcui_create_top_right_button_disabled(vd);
143 _vcui_create_bottom_left_button_disabled(vd);
144 _vcui_create_bottom_middle_button_disabled(vd);
145 _vcui_create_bottom_right_button_disabled(vd);
148 CALL_UI_DEBUG("invalid type... return");
152 evas_object_show(eo);
155 static Evas_Object *__vcui_view_callend_create_contents(void *data, char *grp_name)
158 CALL_UI_DEBUG("ERROR");
161 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
162 Evas_Object *eo = NULL;
164 eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grp_name);
172 static Evas_Object *__vcui_view_callend_create_layout_main(Evas_Object *parent)
174 if (parent == NULL) {
175 CALL_UI_DEBUG("ERROR");
180 ly = elm_layout_add(parent);
181 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
183 elm_layout_theme_set(ly, "standard", "window", "integration");
184 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
185 elm_win_resize_object_add(parent, ly);
187 edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
188 edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
189 evas_object_show(ly);
194 static int __vcui_view_callend_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
196 CALL_UI_DEBUG("endcall view create");
197 voice_call_view_data_t *vd = view_data;
198 vcui_app_call_data_t *ad = vd->app_data;
199 endcall_view_priv_t *priv = (endcall_view_priv_t *)vd->priv;
200 Evas_Object *sep_ly = NULL;
202 CALL_UI_DEBUG("call_end_type[%d]", ad->call_end_type);
203 if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) {
204 call_data = (call_data_t *)param2;
205 } else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) {
206 priv->call_status = _vcui_doc_get_group_call_status();
207 call_data = _vcui_doc_get_call_data_by_call_status(priv->call_status);
210 if (call_data == NULL) {
211 CALL_UI_DEBUG("call Data is NULL");
217 /* Create Main Layout */
218 vd->layout = __vcui_view_callend_create_layout_main(vd->app_data->win_main);
219 if (vd->layout == NULL) {
220 CALL_UI_DEBUG("ERROR");
224 /* Create Contents */
225 if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) {
226 priv->contents = __vcui_view_callend_create_contents(vd, GRP_END_SINGLECALL);
227 sep_ly = __vcui_view_callend_create_contents(vd, GRP_SEPARATOR_LAYOUT_3BUTTON);
228 elm_object_part_content_set(priv->contents, "btn_bg", sep_ly);
229 } else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) {
230 priv->contents = __vcui_view_callend_create_contents(vd, GRP_END_CONFCALL);
231 sep_ly = __vcui_view_callend_create_contents(vd, GRP_SEPARATOR_LAYOUT);
232 elm_object_part_content_set(priv->contents, "btn_bg", sep_ly);
233 priv->btn_ly = __vcui_view_callend_create_contents(vd, GRP_BUTTON_LAYOUT);
234 elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly);
236 priv->caller_info = __vcui_view_callend_create_contents(vd, GRP_CALLER_INFO);
237 elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info);
238 edje_object_signal_emit(_EDJ(priv->caller_info), "set-end-caller_ifno", "end-screen");
240 elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents);
242 evas_object_name_set(priv->contents, VCUI_VIEW_CALLEND_LAYOUT_ID);
243 CALL_UI_DEBUG("[========== ENDCALLVIEW: priv->contents Addr : [%p] ==========]", priv->contents);
246 CALL_UI_DEBUG("[UI]ad->layout_end call==NULL case ");
247 evas_object_show(vd->layout);
250 __vcui_view_callend_onshow(view_data);
254 static int __vcui_view_callend_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
256 CALL_UI_DEBUG("end call view update");
258 __vcui_view_callend_onshow(view_data);
263 static int __vcui_view_callend_onhide(voice_call_view_data_t *view_data)
265 CALL_UI_DEBUG("end call view hide");
267 evas_object_hide(view_data->layout);
271 static int __vcui_view_callend_onshow(voice_call_view_data_t *view_data)
273 CALL_UI_DEBUG("end call view show");
274 CALL_UI_KPI("__vcui_view_callend_onshow start");
275 endcall_view_priv_t *priv = (endcall_view_priv_t *)view_data->priv;
277 /*change the orientation to normal - 0 */
278 elm_win_rotation_with_resize_set(view_data->app_data->win_main, 0);
279 elm_win_rotation_with_resize_set(view_data->app_data->popup_mw, 0);
281 __vcui_view_callend_draw_screen(priv->contents, view_data);
283 evas_object_hide(view_data->layout);
284 evas_object_show(view_data->layout);
288 static int __vcui_view_callend_ondestroy(voice_call_view_data_t *view_data)
290 CALL_UI_DEBUG("endcall view destroy");
292 vcui_app_call_data_t *ad = _vcui_get_app_data();
294 voice_call_view_data_t *vd = ad->view_st[VIEW_ENDCALL_VIEW];
295 endcall_view_priv_t *priv = (endcall_view_priv_t *)vd->priv;
298 if (priv->contents) {
299 evas_object_del(priv->contents);
300 priv->contents = NULL;
303 if (priv->caller_info) {
304 evas_object_del(priv->caller_info);
305 priv->caller_info = NULL;
312 if (vd->layout != NULL) {
313 evas_object_hide(vd->layout);
314 evas_object_del(vd->layout);
318 ad->view_st[VIEW_ENDCALL_VIEW] = NULL;
320 ad->call_end_type = CALL_END_TYPE_NONE;
323 CALL_UI_DEBUG("complete destroy one view");
327 int _vc_ui_view_callend_check_valid_eo(voice_call_view_data_t *vd)
331 endcall_view_priv_t *priv = NULL;
334 VCUI_RETURN_VALUE_IF_FAIL(vd , -1);
335 priv = (endcall_view_priv_t *) vd->priv;
337 valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_CALLEND_LAYOUT_ID);
342 Evas_Object *_vc_ui_view_callend_get_layout(voice_call_view_data_t *vd)
345 endcall_view_priv_t *priv = NULL;
347 VCUI_RETURN_NULL_IF_FAIL(vd);
348 priv = (endcall_view_priv_t *) vd->priv;
350 VCUI_RETURN_NULL_IF_FAIL(priv);
351 return priv->contents;
354 Evas_Object *_vc_ui_view_callend_get_button_layout(voice_call_view_data_t *vd)
357 endcall_view_priv_t *priv = NULL;
359 VCUI_RETURN_NULL_IF_FAIL(vd);
360 priv = (endcall_view_priv_t *) vd->priv;
362 VCUI_RETURN_NULL_IF_FAIL(priv);
366 void _vc_ui_view_callend_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur)
368 endcall_view_priv_t *priv = NULL;
370 VCUI_RETURN_IF_FAIL(vd);
371 priv = (endcall_view_priv_t *) vd->priv;
373 VCUI_RETURN_IF_FAIL(priv);
374 edje_object_part_text_set(_EDJ(priv->caller_info), "txt_status", _(pcall_dur));
377 Evas_Object *_vc_ui_view_callend_get_caller_info(voice_call_view_data_t *vd)
380 endcall_view_priv_t *priv = NULL;
382 VCUI_RETURN_NULL_IF_FAIL(vd);
383 priv = (endcall_view_priv_t *) vd->priv;
385 VCUI_RETURN_NULL_IF_FAIL(priv);
386 return priv->caller_info;