4d8c1b38b901b2f9e3e7bd226960d8b13f013a94
[apps/home/call.git] / ui / src / vcui-view-dialing.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-dialing.h"
20 #include "vcui-view-elements.h"
21 #include "vcui-view-common.h"
22 #include "vcui-app-window.h"
23 #include "vcui-view-keypad.h"
24
25 #define VIEW_DIALING_LAYOUT_ID "DIALVIEW"
26 typedef struct {
27         Evas_Object *contents;
28         Evas_Object *caller_info;
29         Evas_Object *btn_ly;
30         Evas_Object *ic;
31 } vcui_view_dialing_priv_t;
32
33 static int __vcui_view_dialing_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
34 static int __vcui_view_dialing_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
35 static int __vcui_view_dialing_onhide(voice_call_view_data_t *view_data);
36 static int __vcui_view_dialing_onshow(voice_call_view_data_t *view_data);
37 static int __vcui_view_dialing_ondestroy(voice_call_view_data_t *view_data);
38
39 static voice_call_view_data_t s_view = {
40         .type = VIEW_DIALLING_VIEW,
41         .app_data = NULL,
42         .layout = NULL,
43         .onCreate = __vcui_view_dialing_oncreate,
44         .onUpdate = __vcui_view_dialing_onupdate,
45         .onHide = __vcui_view_dialing_onhide,
46         .onShow = __vcui_view_dialing_onshow,
47         .onDestroy = __vcui_view_dialing_ondestroy,
48         .priv = NULL,
49 };
50
51 voice_call_view_data_t *_vcui_view_dialing_new(vcui_app_call_data_t *ad)
52 {
53
54         s_view.app_data = ad;
55         s_view.priv = calloc(1, sizeof(vcui_view_dialing_priv_t));
56
57         if (!s_view.priv) {
58                 CALL_UI_DEBUG("ERROR!!!!!!!!!!! ");
59         }
60
61         return &s_view;
62 }
63
64 void _vcui_view_dialing_draw_txt_ended(voice_call_view_data_t *vd, int end_type)
65 {
66         /* ============ Check valid Evas Object ============= */
67         if (vd == NULL) {
68                 CALL_UI_DEBUG("View Data is NULL");
69                 return;
70         }
71
72         vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv;
73         vcui_app_call_data_t *ad = _vcui_get_app_data();
74
75         int valid = 0;
76         valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID);
77         if (valid == -1) {
78                 CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
79         } else {
80                 char data[VC_DATA_LENGTH_MAX] = { 0, };
81                 edje_object_part_text_set(_EDJ(priv->caller_info), "txt_status", _(_vcui_get_endcause_string(end_type, data)));
82                 ad->quickpanel_text = data;
83         }
84         /* ============ Check valid Evas Object ============= */
85 }
86
87 static void __vcui_view_dialing_draw_screen(Evas_Object *eo, void *data)
88 {
89         CALL_UI_DEBUG("..");
90
91         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
92         vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv;
93
94         call_data_t *now_call_data = _vcui_doc_get_recent_mo_call_data();
95         Eina_Bool bshift_alert = EINA_FALSE;
96
97         /* ============ Check valid Evas Object ============= */
98         int valid = 0;
99         valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID);
100         if (valid == -1) {
101                 CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
102                 return;
103         }
104         /* ============ Check valid Evas Object ============= */
105
106         if (now_call_data == NULL) {
107                 CALL_UI_DEBUG("Now Data is NULL");
108                 return;
109         }
110
111         char *file_path = _vcui_doc_get_caller_id_file_path(now_call_data);
112         CALL_UI_DEBUG("file_path: %s", file_path);
113
114         /* call image */
115         _vcui_delete_contact_image(priv->contents);
116         if (strcmp(file_path, NOIMG_ICON) == 0) {
117                 _vcui_view_common_show_noid_image(priv->contents);
118                 bshift_alert = EINA_TRUE;
119         } else {
120                 {
121                         _vcui_show_wallpaper_image(priv->contents);
122                         priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, file_path);
123                 }
124         }
125
126         _vcui_show_call_bg_img(priv->contents);
127
128         char *call_number = _vcui_doc_get_call_number(now_call_data);
129         char *call_name = _vcui_doc_get_call_display_name(now_call_data);
130         /* call name (if nothing, call number) */
131         if (strlen(call_name) == 0) {
132                 _vcui_show_caller_info_name(vd, call_number, EINA_FALSE);
133         } else {
134                 _vcui_show_caller_info_name(vd, call_name, EINA_FALSE);
135                 _vcui_show_caller_info_number(vd, call_number, EINA_FALSE);
136         }
137
138         _vcui_show_caller_info_icon(vd, EINA_FALSE);
139         _vcui_show_caller_info_status(vd, _("IDS_CALL_POP_CALLING"), EINA_FALSE);
140
141         _vcui_create_top_left_button_disabled(vd);
142         _vcui_create_top_middle_button(vd);
143         _vcui_create_top_right_button(vd);
144         _vcui_create_bottom_left_button(vd);
145         _vcui_create_bottom_middle_button_disabled(vd);
146
147         _vcui_create_bottom_right_button(vd);
148
149         _vcui_elements_check_keypad_n_hide(vd);
150
151         evas_object_show(eo);
152 }
153
154 static Evas_Object *__vcui_view_dialing_create_contents(void *data, char *grpname)
155 {
156         CALL_UI_KPI("__vcui_view_dialing_create_contents start");
157         voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
158         Evas_Object *eo = NULL;
159
160         /* load edje */
161         eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grpname);
162         if (eo == NULL)
163                 return NULL;
164         CALL_UI_KPI("__vcui_view_dialing_create_contents done");
165         return eo;
166 }
167
168 static Evas_Object *__vcui_view_dialing_create_layout_main(Evas_Object *parent)
169 {
170         CALL_UI_KPI("__vcui_view_dialing_create_layout_main start");
171         if (parent == NULL) {
172                 CALL_UI_DEBUG("ERROR");
173                 return NULL;
174         }
175
176         Evas_Object *ly;
177         ly = elm_layout_add(parent);
178         retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
179
180         elm_layout_theme_set(ly, "standard", "window", "integration");
181         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
182         elm_win_resize_object_add(parent, ly);
183
184         edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
185         edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
186         evas_object_show(ly);
187         CALL_UI_KPI("__vcui_view_dialing_create_layout_main done");
188         return ly;
189 }
190
191 static int __vcui_view_dialing_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
192 {
193         CALL_UI_DEBUG("dialling view create!!");
194
195         vcui_app_call_data_t *ad = view_data->app_data;
196         vcui_view_dialing_priv_t *priv = view_data->priv;
197         Evas_Object *sep_ly = NULL;
198
199         if (!view_data->layout) {
200
201                 /* Create Main Layout */
202                 view_data->layout = __vcui_view_dialing_create_layout_main(ad->win_main);
203
204                 if (view_data->layout == NULL) {
205                         CALL_UI_DEBUG("ERROR");
206                         return VC_ERROR;
207                 }
208                 /* Create Contents */
209                 priv->contents = __vcui_view_dialing_create_contents(view_data, GRP_MOVIEW);
210                 elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents);
211
212                 priv->caller_info = __vcui_view_dialing_create_contents(view_data, GRP_CALLER_INFO);
213                 elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info);
214
215                 sep_ly = __vcui_view_dialing_create_contents(view_data, GRP_SEPARATOR_LAYOUT);
216                 elm_object_part_content_set(priv->contents, "btn_bg", sep_ly);
217
218                 priv->btn_ly = __vcui_view_dialing_create_contents(view_data, GRP_BUTTON_LAYOUT);
219                 elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly);
220
221                 evas_object_name_set(priv->contents, VIEW_DIALING_LAYOUT_ID);
222                 CALL_UI_DEBUG("[========== DIALVIEW: priv->contents Addr : [%p] ==========]", priv->contents);
223         }
224
225         __vcui_view_dialing_onshow(view_data);
226         return VC_NO_ERROR;
227 }
228
229 static int __vcui_view_dialing_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
230 {
231         CALL_UI_DEBUG("dialling view update");
232         vcui_view_dialing_priv_t *priv = view_data->priv;
233
234         __vcui_view_dialing_draw_screen(priv->contents, view_data);
235         return VC_NO_ERROR;
236 }
237
238 static int __vcui_view_dialing_onhide(voice_call_view_data_t *view_data)
239 {
240         CALL_UI_DEBUG("dialling view hide");
241
242         int valid = 0;
243         vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)view_data->priv;
244         valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID);
245
246         if (valid == -1) {
247                 CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
248         }
249
250         evas_object_hide(view_data->layout);
251         return VC_NO_ERROR;
252 }
253
254 static int __vcui_view_dialing_onshow(voice_call_view_data_t *view_data)
255 {
256         CALL_UI_KPI("__vcui_view_dialing_onshow start");
257         CALL_UI_DEBUG("dialling view show");
258
259         vcui_view_dialing_priv_t *priv = view_data->priv;
260
261         __vcui_view_dialing_draw_screen(priv->contents, view_data);
262
263         evas_object_hide(view_data->layout);
264         evas_object_show(view_data->layout);
265
266         if (_vcui_is_idle_lock() == CALL_LOCK)
267                 _vcui_app_win_set_noti_type(EINA_TRUE);
268         else
269                 _vcui_app_win_set_noti_type(EINA_FALSE);
270
271         CALL_UI_KPI("__vcui_view_dialing_onshow done");
272
273         return VC_NO_ERROR;
274 }
275
276 static int __vcui_view_dialing_ondestroy(voice_call_view_data_t *view_data)
277 {
278         CALL_UI_DEBUG("dialling view destroy");
279
280         vcui_app_call_data_t *ad = _vcui_get_app_data();
281
282         voice_call_view_data_t *vd = ad->view_st[VIEW_DIALLING_VIEW];
283         vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv;
284
285         if (priv != NULL) {
286                 if (priv->btn_ly) {
287                         evas_object_del(priv->btn_ly);
288                         priv->btn_ly = NULL;
289                 }
290
291                 if (priv->caller_info) {
292                         evas_object_del(priv->caller_info);
293                         priv->caller_info = NULL;
294                 }
295
296                 /*Delete keypad layout*/
297                 _vcui_keypad_delete_layout(priv->contents);
298
299                 if (priv->contents) {
300                         evas_object_del(priv->contents);
301                         priv->contents = NULL;
302                 }
303
304                 free(priv);
305                 priv = NULL;
306         }
307
308         if (vd->layout != NULL) {
309                 evas_object_hide(vd->layout);
310                 evas_object_del(vd->layout);
311                 vd->layout = NULL;
312         }
313
314         ad->view_st[VIEW_DIALLING_VIEW] = NULL;
315
316         _vcui_cache_flush();
317         return VC_NO_ERROR;
318 }
319
320 int     _vc_ui_view_dialing_check_valid_eo(voice_call_view_data_t *vd)
321 {
322         CALL_UI_DEBUG("..");
323
324         vcui_view_dialing_priv_t *priv = NULL;
325         int valid = -1;
326
327         VCUI_RETURN_VALUE_IF_FAIL(vd , -1);
328         priv = (vcui_view_dialing_priv_t *) vd->priv;
329
330         valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID);
331
332         return valid;
333 }
334
335 Evas_Object *_vc_ui_view_dialing_get_layout(voice_call_view_data_t *vd)
336 {
337         CALL_UI_DEBUG("..");
338         vcui_view_dialing_priv_t *priv = NULL;
339
340         VCUI_RETURN_NULL_IF_FAIL(vd);
341         priv = (vcui_view_dialing_priv_t *) vd->priv;
342
343         VCUI_RETURN_NULL_IF_FAIL(priv);
344         return priv->contents;
345 }
346
347 Evas_Object *_vc_ui_view_dialing_get_button_layout(voice_call_view_data_t *vd)
348 {
349         CALL_UI_DEBUG("..");
350         vcui_view_dialing_priv_t *priv = NULL;
351
352         VCUI_RETURN_NULL_IF_FAIL(vd);
353         priv = (vcui_view_dialing_priv_t *) vd->priv;
354
355         VCUI_RETURN_NULL_IF_FAIL(priv);
356         return priv->btn_ly;
357 }
358
359 Evas_Object *_vc_ui_view_dialing_get_caller_info(voice_call_view_data_t *vd)
360 {
361         CALL_UI_DEBUG("..");
362         vcui_view_dialing_priv_t *priv = NULL;
363
364         VCUI_RETURN_NULL_IF_FAIL(vd);
365         priv = (vcui_view_dialing_priv_t *) vd->priv;
366
367         VCUI_RETURN_NULL_IF_FAIL(priv);
368         return priv->caller_info;
369 }
370