Disable entry point for other applications
[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                         if (_vcui_view_common_is_emul_bin() == EINA_TRUE) {
164                                 _vcui_create_top_left_button_disabled(vd);
165                                 _vcui_create_bottom_right_button_disabled(vd);
166                         } else {
167                                 _vcui_create_top_left_button(vd);
168                                 _vcui_create_bottom_right_button(vd);
169                         }
170                 }
171         }
172         CALL_UI_KPI("edje_object_signal_emit effect start");
173         if (ad->beffect_needed == EINA_TRUE) {
174                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_EFFECT", "ALLBTN");
175                 ad->beffect_needed = EINA_FALSE;
176         } else {
177                 edje_object_signal_emit(_EDJ(priv->contents), "SHOW_NO_EFFECT", "ALLBTN");
178         }
179         CALL_UI_KPI("edje_object_signal_emit effect done");
180
181         _vcui_elements_check_keypad_n_hide(vd);
182
183         CALL_UI_KPI("evas_object_show start");
184         evas_object_show(eo);
185         CALL_UI_KPI("evas_object_show done");
186 }
187
188 static Evas_Object *__vc_ui_view_single_call_create_contents(void *data, char *grpname)
189 {
190         if (data == NULL) {
191                 CALL_UI_DEBUG("ERROR");
192                 return NULL;
193         }
194         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
195         Evas_Object *eo = NULL;
196
197         /* load edje */
198         eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grpname);
199         if (eo == NULL)
200                 return NULL;
201
202         return eo;
203 }
204
205 static Evas_Object *__vc_ui_view_single_call_create_layout_main(Evas_Object *parent)
206 {
207         if (parent == NULL) {
208                 CALL_UI_DEBUG("ERROR");
209                 return NULL;
210         }
211
212         Evas_Object *ly;
213         ly = elm_layout_add(parent);
214         retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
215
216         elm_layout_theme_set(ly, "standard", "window", "integration");
217         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
218         elm_win_resize_object_add(parent, ly);
219
220         edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
221         edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
222         evas_object_show(ly);
223
224         return ly;
225 }
226
227 static int __vc_ui_view_single_call_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
228 {
229         CALL_UI_DEBUG("incall view create");
230         voice_call_view_data_t *vd = view_data;
231         incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv;
232         call_data_t *call_data = _vcui_doc_get_first_call_data_from_list();
233         Evas_Object *sep_ly = NULL;
234
235         if (call_data == NULL) {
236                 CALL_UI_DEBUG("call data is null");
237                 return VC_ERROR;
238         }
239
240         if (!vd->layout) {
241
242                 CALL_UI_KPI("__vc_ui_view_single_call_create_layout_main start");
243                 vd->layout = __vc_ui_view_single_call_create_layout_main(vd->app_data->win_main);
244                 CALL_UI_KPI("__vc_ui_view_single_call_create_layout_main done");
245                 if (vd->layout == NULL) {
246                         CALL_UI_DEBUG("ERROR");
247                         return VC_ERROR;
248                 }
249
250                 CALL_UI_KPI("__vc_ui_view_single_call_create_contents start");
251                 priv->contents = __vc_ui_view_single_call_create_contents(vd, GRP_INCALL);
252                 elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents);
253                 CALL_UI_KPI("__vc_ui_view_single_call_create_contents done");
254
255                 sep_ly = __vc_ui_view_single_call_create_contents(vd, "separator-layout");
256                 elm_object_part_content_set(priv->contents, "btn_bg", sep_ly);
257
258                 priv->btn_ly = __vc_ui_view_single_call_create_contents(vd, GRP_BUTTON_LAYOUT);
259                 elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly);
260
261                 priv->caller_info = __vc_ui_view_single_call_create_contents(vd, GRP_CALLER_INFO);
262                 elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info);
263
264                 CALL_UI_KPI("evas_object_name_set start");
265                 evas_object_name_set(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID);
266                 CALL_UI_KPI("evas_object_name_set done");
267                 CALL_UI_DEBUG("[========== ONEVIEW: priv->contents Addr : [%p] ==========]", priv->contents);
268
269         } else {
270                 CALL_UI_DEBUG("[UI]ad->layout_incall==NULL case ");
271                 evas_object_show(vd->layout);
272         }
273
274         __vc_ui_view_single_call_onshow(view_data);
275         return VC_NO_ERROR;
276 }
277
278 static int __vc_ui_view_single_call_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
279 {
280         CALL_UI_DEBUG("incall view update");
281
282         __vc_ui_view_single_call_onshow(view_data);
283
284         return VC_NO_ERROR;
285 }
286
287 static int __vc_ui_view_single_call_onhide(voice_call_view_data_t *view_data)
288 {
289         CALL_UI_DEBUG("incall view hide");
290
291         evas_object_hide(view_data->layout);
292         return VC_NO_ERROR;
293 }
294
295 static int __vc_ui_view_single_call_onshow(voice_call_view_data_t *view_data)
296 {
297         CALL_UI_DEBUG("incall view show");
298         CALL_UI_KPI("__vc_ui_view_single_call_onshow start");
299         incall_one_view_priv_t *priv = (incall_one_view_priv_t *)view_data->priv;
300         call_data_t *call_data = _vcui_doc_get_first_call_data_from_list();
301
302         /*change the orientation to normal - 0 */
303         elm_win_rotation_with_resize_set(view_data->app_data->win_main, 0);
304         elm_win_rotation_with_resize_set(view_data->app_data->popup_mw, 0);
305
306         if (call_data == NULL) {
307                 CALL_UI_DEBUG("call data is null");
308                 return VC_ERROR;
309         }
310         CALL_UI_KPI("__vc_ui_view_single_call_draw_screen start");
311         __vc_ui_view_single_call_draw_screen(priv->contents, view_data);
312         CALL_UI_KPI("__vc_ui_view_single_call_draw_screen done");
313
314         CALL_UI_KPI("incall-one-view hide start");
315         evas_object_hide(view_data->layout);
316         CALL_UI_KPI("incall-one-view hide done");
317         CALL_UI_KPI("incall-one-view show start");
318         evas_object_show(view_data->layout);
319         CALL_UI_KPI("incall-one-view show done");
320         CALL_UI_KPI("__vc_ui_view_single_call_onshow done");
321         return VC_NO_ERROR;
322 }
323
324 static int __vc_ui_view_single_call_ondestroy(voice_call_view_data_t *view_data)
325 {
326         CALL_UI_DEBUG("incall view destroy");
327
328         vcui_app_call_data_t *ad = _vcui_get_app_data();
329
330         voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_ONECALL_VIEW];
331         incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv;
332
333         if (priv != NULL) {
334                 if (priv->btn_ly) {
335                         evas_object_del(priv->btn_ly);
336                         priv->btn_ly = NULL;
337                 }
338
339                 if (priv->caller_info) {
340                         evas_object_del(priv->caller_info);
341                         priv->caller_info = NULL;
342                 }
343
344                 /*Delete keypad layout*/
345                 _vcui_keypad_delete_layout(priv->contents);
346
347                 if (priv->contents) {
348                         evas_object_del(priv->contents);
349                         priv->contents = NULL;
350                 }
351
352                 free(priv);
353                 priv = NULL;
354         }
355
356         if (vd->layout != NULL) {
357                 evas_object_hide(vd->layout);
358                 evas_object_del(vd->layout);
359                 vd->layout = NULL;
360         }
361
362         ad->view_st[VIEW_INCALL_ONECALL_VIEW] = NULL;
363
364         _vcui_cache_flush();
365         CALL_UI_DEBUG("complete destroy one view");
366         return VC_NO_ERROR;
367 }
368
369 int     _vc_ui_view_single_call_check_valid_eo(voice_call_view_data_t *vd)
370 {
371         CALL_UI_DEBUG("..");
372
373         incall_one_view_priv_t *priv = NULL;
374         int valid = -1;
375
376         VCUI_RETURN_VALUE_IF_FAIL(vd , -1);
377         priv = (incall_one_view_priv_t *) vd->priv;
378
379         valid = _vcui_check_valid_eo(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID);
380
381         return valid;
382 }
383
384 Evas_Object *_vc_ui_view_single_call_get_layout(voice_call_view_data_t *vd)
385 {
386         CALL_UI_DEBUG("..");
387         incall_one_view_priv_t *priv = NULL;
388
389         VCUI_RETURN_NULL_IF_FAIL(vd);
390         priv = (incall_one_view_priv_t *) vd->priv;
391
392         VCUI_RETURN_NULL_IF_FAIL(priv);
393         return priv->contents;
394 }
395
396 Evas_Object *_vc_ui_view_single_call_get_button_layout(voice_call_view_data_t *vd)
397 {
398         CALL_UI_DEBUG("..");
399         incall_one_view_priv_t *priv = NULL;
400
401         VCUI_RETURN_NULL_IF_FAIL(vd);
402         priv = (incall_one_view_priv_t *) vd->priv;
403
404         VCUI_RETURN_NULL_IF_FAIL(priv);
405         return priv->btn_ly;
406 }
407
408 int     _vc_ui_view_single_call_get_call_status(voice_call_view_data_t *vd)
409 {
410         CALL_UI_DEBUG("..");
411         incall_one_view_priv_t *priv = NULL;
412         call_data_t *call_data = _vcui_doc_get_first_call_data_from_list();
413         int call_status = 0;
414
415         VCUI_RETURN_INVALID_IF_FAIL(vd);
416         priv = (incall_one_view_priv_t *) vd->priv;
417
418         VCUI_RETURN_INVALID_IF_FAIL(call_data);
419         call_status = _vcui_doc_get_call_status(call_data);
420         return call_status;
421 }
422
423 void _vc_ui_view_single_call_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur)
424 {
425         incall_one_view_priv_t *priv = NULL;
426
427         VCUI_RETURN_IF_FAIL(vd);
428         priv = (incall_one_view_priv_t *) vd->priv;
429
430         VCUI_RETURN_IF_FAIL(priv);
431         edje_object_part_text_set(_EDJ(priv->caller_info), "txt_timer", _(pcall_dur));
432 }
433
434 Evas_Object *_vc_ui_view_single_call_get_caller_info(voice_call_view_data_t *vd)
435 {
436         CALL_UI_DEBUG("..");
437         incall_one_view_priv_t *priv = NULL;
438
439         VCUI_RETURN_NULL_IF_FAIL(vd);
440         priv = (incall_one_view_priv_t *) vd->priv;
441
442         VCUI_RETURN_NULL_IF_FAIL(priv);
443         return priv->caller_info;
444 }
445