apply FSL(Flora Software License)
[apps/home/call.git] / ui / src / vcui-view-single-call.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-common.h"
20 #include "vcui-view-single-call.h"
21 #include "vcui-view-keypad.h"
22 #include "vcui-view-elements.h"
23
24 #define VIEW_SINGLE_CALL_LAYOUT_ID "ONEVIEW"
25 typedef struct {
26         Evas_Object *contents;
27         Evas_Object *caller_info;
28         Evas_Object *btn_ly;
29         Evas_Object *ic;
30         Evas_Object *record_btn;
31 } incall_one_view_priv_t;
32
33 static int __vc_ui_view_single_call_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
34 static int __vc_ui_view_single_call_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
35 static int __vc_ui_view_single_call_onhide(voice_call_view_data_t *view_data);
36 static int __vc_ui_view_single_call_onshow(voice_call_view_data_t *view_data);
37 static int __vc_ui_view_single_call_ondestroy(voice_call_view_data_t *view_data);
38 static Evas_Object *__vc_ui_view_single_call_create_contents(void *data, char *grpname);
39
40 static voice_call_view_data_t s_view = {
41         .type = VIEW_INCALL_ONECALL_VIEW,
42         .app_data = NULL,
43         .layout = NULL,
44         .onCreate = __vc_ui_view_single_call_oncreate,
45         .onUpdate = __vc_ui_view_single_call_onupdate,
46         .onHide = __vc_ui_view_single_call_onhide,
47         .onShow = __vc_ui_view_single_call_onshow,
48         .onDestroy = __vc_ui_view_single_call_ondestroy,
49         .priv = NULL,
50 };
51
52 voice_call_view_data_t *_vc_ui_view_single_call_new(vcui_app_call_data_t *ad)
53 {
54         s_view.app_data = ad;
55         s_view.priv = calloc(1, sizeof(incall_one_view_priv_t));
56
57         if (!s_view.priv) {
58                 CALL_UI_DEBUG("ERROR!!!!!!!!!!!");
59         }
60
61         return &s_view;
62 }
63
64 static void __vc_ui_view_single_call_draw_screen(Evas_Object *eo, void *data)
65 {
66         CALL_UI_DEBUG("..");
67
68         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
69         incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv;
70         vcui_app_call_data_t *ad = vd->app_data;
71         call_data_t *call_data = _vcui_doc_get_first_call_data_from_list();
72
73         if (call_data == NULL) {
74                 CALL_UI_DEBUG("call Data is NULL");
75                 return;
76         }
77
78         /* ============ Check valid Evas Object ============= */
79         int valid = 0;
80         CALL_UI_KPI("_vcui_check_valid_eo ONEVIEW start");
81         valid = _vcui_check_valid_eo(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID);
82         CALL_UI_KPI("_vcui_check_valid_eo ONEVIEW done");
83         if (valid == -1) {
84                 CALL_UI_DEBUG("[========== ONEVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
85                 return;
86         }
87         /* ============ Check valid Evas Object ============= */
88
89         char *file_path = _vcui_doc_get_caller_id_file_path(call_data);
90         int caller_status = _vcui_doc_get_call_status(call_data);
91
92         /* call image */
93         _vcui_delete_contact_image(priv->contents);
94         if (strcmp(file_path, NOIMG_ICON) == 0) {
95                 _vcui_show_wallpaper_image(priv->contents);
96         } else {
97                 CALL_UI_DEBUG("Caller ID file_path: %s", file_path);
98                 {
99                         _vcui_show_wallpaper_image(priv->contents);
100                         priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, file_path);
101                 }
102         }
103
104         _vcui_show_call_bg_img(priv->contents);
105         _vcui_show_caller_info_status(data, _("IDS_CALL_BODY_ON_HOLD_ABB"), EINA_FALSE);
106         if (caller_status == CALL_HOLD) {
107                 CALL_UI_DEBUG("=================HOLD====================== ");
108                 edje_object_signal_emit(_EDJ(priv->caller_info), "set-hold-state", "call-screen");
109         } else {
110                 CALL_UI_DEBUG("=================UNHOLD====================== ");
111
112                 edje_object_signal_emit(_EDJ(priv->caller_info), "set-unhold-state", "call-screen");
113         }
114
115         char *call_number = _vcui_doc_get_call_number(call_data);
116         char *call_name = _vcui_doc_get_call_display_name(call_data);
117         /* call name (if nothing, call number) */
118         CALL_UI_KPI("edje_object_part_text_set start");
119         if (strlen(call_name) == 0) {
120                 _vcui_show_caller_info_name(vd, call_number, EINA_FALSE);
121         } else {
122                 _vcui_show_caller_info_name(vd, call_name, EINA_FALSE);
123                 _vcui_show_caller_info_number(vd, call_number, EINA_FALSE);
124         }
125         CALL_UI_KPI("edje_object_part_text_set done");
126
127         _vcui_show_caller_info_icon(vd, EINA_FALSE);
128
129         CALL_UI_KPI("_vcui_view_common_set_each_time start");
130         _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data));
131         CALL_UI_KPI("_vcui_view_common_set_each_time done");
132
133         {
134                 CALL_UI_DEBUG("..");
135
136                 /*create a small button for Hold/Swap*/
137                 _vcui_create_hold_swap_button(vd);
138
139                 if ((_vcui_is_phonelock_status() == EINA_TRUE) && (_vcui_is_idle_lock() == EINA_TRUE)) {
140                         CALL_UI_KPI("_vcui_create_top_middle_button start");
141                         _vcui_create_top_middle_button_disabled(vd);
142                         CALL_UI_KPI("_vcui_create_top_middle_button done");
143
144                 } else {
145                         CALL_UI_KPI("_vcui_create_top_middle_button start");
146                         _vcui_create_top_middle_button(vd);
147                         CALL_UI_KPI("_vcui_create_top_middle_button done");
148
149                 }
150
151                 CALL_UI_KPI("_vcui_create_top_right_button start");
152                 _vcui_create_top_right_button(vd);
153                 CALL_UI_KPI("_vcui_create_top_right_button done");
154
155                 CALL_UI_KPI("_vcui_create_bottom_left_button start");
156                 _vcui_create_bottom_left_button(vd);
157                 CALL_UI_KPI("_vcui_create_bottom_left_button done");
158
159                 CALL_UI_KPI("_vcui_create_bottom_middle_button start");
160                 _vcui_create_bottom_middle_button(vd);
161                 CALL_UI_KPI("_vcui_create_bottom_middle_button done");
162                 {
163                         _vcui_create_top_left_button(vd);
164                         _vcui_create_bottom_right_button(vd);
165                 }
166         }
167         CALL_UI_KPI("edje_object_signal_emit effect start");
168         if (ad->beffect_needed == EINA_TRUE) {
169                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_EFFECT", "ALLBTN");
170                 ad->beffect_needed = EINA_FALSE;
171         } else {
172                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_NO_EFFECT", "ALLBTN");
173         }
174         CALL_UI_KPI("edje_object_signal_emit effect done");
175
176         _vcui_elements_check_keypad_n_hide(vd);
177
178         CALL_UI_KPI("evas_object_show start");
179         evas_object_show(eo);
180         CALL_UI_KPI("evas_object_show done");
181 }
182
183 static Evas_Object *__vc_ui_view_single_call_create_contents(void *data, char *grpname)
184 {
185         if (data == NULL) {
186                 CALL_UI_DEBUG("ERROR");
187                 return NULL;
188         }
189         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
190         Evas_Object *eo = NULL;
191
192         /* load edje */
193         eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grpname);
194         if (eo == NULL)
195                 return NULL;
196
197         return eo;
198 }
199
200 static Evas_Object *__vc_ui_view_single_call_create_layout_main(Evas_Object *parent)
201 {
202         if (parent == NULL) {
203                 CALL_UI_DEBUG("ERROR");
204                 return NULL;
205         }
206
207         Evas_Object *ly;
208         ly = elm_layout_add(parent);
209         retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
210
211         elm_layout_theme_set(ly, "standard", "window", "integration");
212         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
213         elm_win_resize_object_add(parent, ly);
214
215         edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
216         edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
217         evas_object_show(ly);
218
219         return ly;
220 }
221
222 static int __vc_ui_view_single_call_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
223 {
224         CALL_UI_DEBUG("incall view create");
225         voice_call_view_data_t *vd = view_data;
226         incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv;
227         call_data_t *call_data = _vcui_doc_get_first_call_data_from_list();
228         Evas_Object *sep_ly = NULL;
229
230         if (call_data == NULL) {
231                 CALL_UI_DEBUG("call data is null");
232                 return VC_ERROR;
233         }
234
235         if (!vd->layout) {
236
237                 CALL_UI_KPI("__vc_ui_view_single_call_create_layout_main start");
238                 vd->layout = __vc_ui_view_single_call_create_layout_main(vd->app_data->win_main);
239                 CALL_UI_KPI("__vc_ui_view_single_call_create_layout_main done");
240                 if (vd->layout == NULL) {
241                         CALL_UI_DEBUG("ERROR");
242                         return VC_ERROR;
243                 }
244
245                 CALL_UI_KPI("__vc_ui_view_single_call_create_contents start");
246                 priv->contents = __vc_ui_view_single_call_create_contents(vd, GRP_INCALL);
247                 elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents);
248                 CALL_UI_KPI("__vc_ui_view_single_call_create_contents done");
249
250                 sep_ly = __vc_ui_view_single_call_create_contents(vd, "separator-layout");
251                 elm_object_part_content_set(priv->contents, "btn_bg", sep_ly);
252
253                 priv->btn_ly = __vc_ui_view_single_call_create_contents(vd, GRP_BUTTON_LAYOUT);
254                 elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly);
255
256                 priv->caller_info = __vc_ui_view_single_call_create_contents(vd, GRP_CALLER_INFO);
257                 elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info);
258
259                 CALL_UI_KPI("evas_object_name_set start");
260                 evas_object_name_set(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID);
261                 CALL_UI_KPI("evas_object_name_set done");
262                 CALL_UI_DEBUG("[========== ONEVIEW: priv->contents Addr : [%p] ==========]", priv->contents);
263
264         } else {
265                 CALL_UI_DEBUG("[UI]ad->layout_incall==NULL case ");
266                 evas_object_show(vd->layout);
267         }
268
269         __vc_ui_view_single_call_onshow(view_data);
270         return VC_NO_ERROR;
271 }
272
273 static int __vc_ui_view_single_call_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
274 {
275         CALL_UI_DEBUG("incall view update");
276
277         __vc_ui_view_single_call_onshow(view_data);
278
279         return VC_NO_ERROR;
280 }
281
282 static int __vc_ui_view_single_call_onhide(voice_call_view_data_t *view_data)
283 {
284         CALL_UI_DEBUG("incall view hide");
285
286         evas_object_hide(view_data->layout);
287         return VC_NO_ERROR;
288 }
289
290 static int __vc_ui_view_single_call_onshow(voice_call_view_data_t *view_data)
291 {
292         CALL_UI_DEBUG("incall view show");
293         CALL_UI_KPI("__vc_ui_view_single_call_onshow start");
294         incall_one_view_priv_t *priv = (incall_one_view_priv_t *)view_data->priv;
295         call_data_t *call_data = _vcui_doc_get_first_call_data_from_list();
296
297         /*change the orientation to normal - 0 */
298         elm_win_rotation_with_resize_set(view_data->app_data->win_main, 0);
299         elm_win_rotation_with_resize_set(view_data->app_data->popup_mw, 0);
300
301         if (call_data == NULL) {
302                 CALL_UI_DEBUG("call data is null");
303                 return VC_ERROR;
304         }
305         CALL_UI_KPI("__vc_ui_view_single_call_draw_screen start");
306         __vc_ui_view_single_call_draw_screen(priv->contents, view_data);
307         CALL_UI_KPI("__vc_ui_view_single_call_draw_screen done");
308
309         CALL_UI_KPI("incall-one-view hide start");
310         evas_object_hide(view_data->layout);
311         CALL_UI_KPI("incall-one-view hide done");
312         CALL_UI_KPI("incall-one-view show start");
313         evas_object_show(view_data->layout);
314         CALL_UI_KPI("incall-one-view show done");
315         CALL_UI_KPI("__vc_ui_view_single_call_onshow done");
316         return VC_NO_ERROR;
317 }
318
319 static int __vc_ui_view_single_call_ondestroy(voice_call_view_data_t *view_data)
320 {
321         CALL_UI_DEBUG("incall view destroy");
322
323         vcui_app_call_data_t *ad = _vcui_get_app_data();
324
325         voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_ONECALL_VIEW];
326         incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv;
327
328         if (priv != NULL) {
329                 if (priv->btn_ly) {
330                         evas_object_del(priv->btn_ly);
331                         priv->btn_ly = NULL;
332                 }
333
334                 if (priv->caller_info) {
335                         evas_object_del(priv->caller_info);
336                         priv->caller_info = NULL;
337                 }
338
339                 /*Delete keypad layout*/
340                 _vcui_keypad_delete_layout(priv->contents);
341
342                 if (priv->contents) {
343                         evas_object_del(priv->contents);
344                         priv->contents = NULL;
345                 }
346
347                 free(priv);
348                 priv = NULL;
349         }
350
351         if (vd->layout != NULL) {
352                 evas_object_hide(vd->layout);
353                 evas_object_del(vd->layout);
354                 vd->layout = NULL;
355         }
356
357         ad->view_st[VIEW_INCALL_ONECALL_VIEW] = NULL;
358
359         _vcui_cache_flush();
360         CALL_UI_DEBUG("complete destroy one view");
361         return VC_NO_ERROR;
362 }
363
364 int     _vc_ui_view_single_call_check_valid_eo(voice_call_view_data_t *vd)
365 {
366         CALL_UI_DEBUG("..");
367
368         incall_one_view_priv_t *priv = NULL;
369         int valid = -1;
370
371         VCUI_RETURN_VALUE_IF_FAIL(vd , -1);
372         priv = (incall_one_view_priv_t *) vd->priv;
373
374         valid = _vcui_check_valid_eo(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID);
375
376         return valid;
377 }
378
379 Evas_Object *_vc_ui_view_single_call_get_layout(voice_call_view_data_t *vd)
380 {
381         CALL_UI_DEBUG("..");
382         incall_one_view_priv_t *priv = NULL;
383
384         VCUI_RETURN_NULL_IF_FAIL(vd);
385         priv = (incall_one_view_priv_t *) vd->priv;
386
387         VCUI_RETURN_NULL_IF_FAIL(priv);
388         return priv->contents;
389 }
390
391 Evas_Object *_vc_ui_view_single_call_get_button_layout(voice_call_view_data_t *vd)
392 {
393         CALL_UI_DEBUG("..");
394         incall_one_view_priv_t *priv = NULL;
395
396         VCUI_RETURN_NULL_IF_FAIL(vd);
397         priv = (incall_one_view_priv_t *) vd->priv;
398
399         VCUI_RETURN_NULL_IF_FAIL(priv);
400         return priv->btn_ly;
401 }
402
403 int     _vc_ui_view_single_call_get_call_status(voice_call_view_data_t *vd)
404 {
405         CALL_UI_DEBUG("..");
406         incall_one_view_priv_t *priv = NULL;
407         call_data_t *call_data = _vcui_doc_get_first_call_data_from_list();
408         int call_status = 0;
409
410         VCUI_RETURN_INVALID_IF_FAIL(vd);
411         priv = (incall_one_view_priv_t *) vd->priv;
412
413         VCUI_RETURN_INVALID_IF_FAIL(call_data);
414         call_status = _vcui_doc_get_call_status(call_data);
415         return call_status;
416 }
417
418 void _vc_ui_view_single_call_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur)
419 {
420         incall_one_view_priv_t *priv = NULL;
421
422         VCUI_RETURN_IF_FAIL(vd);
423         priv = (incall_one_view_priv_t *) vd->priv;
424
425         VCUI_RETURN_IF_FAIL(priv);
426         edje_object_part_text_set(_EDJ(priv->caller_info), "txt_timer", _(pcall_dur));
427 }
428
429 Evas_Object *_vc_ui_view_single_call_get_caller_info(voice_call_view_data_t *vd)
430 {
431         CALL_UI_DEBUG("..");
432         incall_one_view_priv_t *priv = NULL;
433
434         VCUI_RETURN_NULL_IF_FAIL(vd);
435         priv = (incall_one_view_priv_t *) vd->priv;
436
437         VCUI_RETURN_NULL_IF_FAIL(priv);
438         return priv->caller_info;
439 }
440