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