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"
21 #include "vcui-view-dialing.h"
22 #include "vcui-view-incoming.h"
23 #include "vcui-view-single-call.h"
24 #include "vcui-view-multi-call-split.h"
25 #include "vcui-view-multi-call-conf.h"
26 #include "vcui-view-multi-call-list.h"
27 #include "vcui-view-keypad.h"
28 #include "vcui-view-callend.h"
30 static vcui_view_common_t gincall_common_data;
32 void _vcui_view_common_init()
34 memset(&gincall_common_data, 0, sizeof(vcui_view_common_t));
37 static vcui_view_common_t *__vcui_view_common_get_common_data()
39 return &gincall_common_data;
42 static Eina_Bool __vcui_view_common_timer_cb(void *data)
44 //voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
45 //vcui_app_call_data_t *ad = vd->app_data;
46 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
47 char dur[TIME_BUF_LEN];
48 static int end_count = 0;
50 if (common_data->timer_flag == 1) {
51 if (common_data->time_end_flag == TIME_END_START) {
54 } else if (common_data->time_end_flag == TIME_END_NO) {
61 common_data->current_call_time = time(NULL);
63 if (common_data->timer_flag == 1) {
64 if (common_data->current_call_time > common_data->start_call_time) {
65 time_t call_time = common_data->current_call_time - common_data->start_call_time;
68 gmtime_r((const time_t *)&call_time, &loctime);
69 snprintf(dur, TIME_BUF_LEN, "%02d:%02d:%02d", loctime.tm_hour, loctime.tm_min, loctime.tm_sec);
71 _vcui_view_common_set_text_time(dur);
78 static Eina_Bool __vcui_view_common_timer_end_cb(void *data)
80 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
81 int end_type = common_data->end_type;
82 char dur[TIME_BUF_LEN];
84 if ((common_data->timer_flag == 1) && (common_data->time_end_flag == TIME_END_START)) {
85 snprintf(dur, TIME_BUF_LEN, "%02d:%02d:%02d", common_data->hour, common_data->min, common_data->sec);
86 if (common_data->time_count == 0) {
87 _vcui_view_common_set_text_time(dur);
88 } else if (common_data->time_count == 1) {
89 _vcui_view_common_set_text_time(_(" "));
90 } else if (common_data->time_count == 2) {
91 _vcui_view_common_set_text_time(dur);
92 } else if (common_data->time_count == 3) {
93 _vcui_view_common_set_text_time(_(" "));
94 } else if (common_data->time_count == 4) {
95 char data[VC_DATA_LENGTH_MAX] = { 0, };
96 _vcui_view_common_set_text_time(_vcui_get_endcause_string(end_type, data));
99 common_data->time_count++;
100 if (common_data->time_count == TIME_END_MAX_SHOW) {
101 common_data->time_end_flag = TIME_END_NO;
102 common_data->time_count = 0;
104 if (common_data->tm_end) {
105 ecore_timer_del(common_data->tm_end);
106 common_data->tm_end = NULL;
109 _vcui_view_common_call_terminate_or_view_change();
115 static Eina_Bool __vcui_view_common_timer_end_dialing_cb(void *data)
118 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
119 vcui_app_call_data_t *ad = _vcui_get_app_data();
121 if (common_data->tm_end_dialing) {
122 ecore_timer_del(common_data->tm_end_dialing);
123 common_data->tm_end_dialing = NULL;
126 if (common_data->bredial == EINA_TRUE) {
127 /*_vcui_view_all_hide();*/
128 _vcui_engine_interface_process_auto_redial(EINA_TRUE);
129 _vcui_view_popup_load_redial();
130 _vcui_view_dialing_draw_txt_dialing(ad->view_st[VIEW_DIALLING_VIEW]);
132 _vcui_view_common_call_terminate_or_view_change();
138 static Eina_Bool __vcui_view_common_timer_end_force_cb(void *data)
141 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
143 if (common_data->tm_end_force) {
144 ecore_timer_del(common_data->tm_end_force);
145 common_data->tm_end_force = NULL;
148 _vcui_view_common_call_terminate_or_view_change();
153 void _vcui_view_common_set_text_time(char *time_dur)
155 vcui_app_call_data_t *ad = _vcui_get_app_data();
156 voice_call_view_data_t *data = ad->view_st[ad->view_top];
160 if (data->type == VIEW_INCALL_ONECALL_VIEW) {
162 incall_one_view_priv_t *priv = data->priv;
163 if (priv->contents) {
164 /* ============ Check valid Evas Object ============= */
165 valid = _vcui_check_valid_eo(priv->contents, "ONEVIEW");
167 CALL_UI_DEBUG("[========== ONEVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
170 /* ============ Check valid Evas Object ============= */
171 edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO
173 CALL_UI_DEBUG("ERR : Null Evas_Object priv->contents");
177 } else if (data->type == VIEW_INCALL_MULTICALL_SPLIT_VIEW) {
179 incall_multi_view_split_priv_t *priv = data->priv;
180 /* ============ Check valid Evas Object ============= */
181 valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWSPLIT");
183 CALL_UI_DEBUG("[========== MULTIVIEWSPLIT : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
186 /* ============ Check valid Evas Object ============= */
187 edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO
189 CALL_UI_DEBUG("ERR : Null Evas_Object data->layout");
191 } else if (data->type == VIEW_INCALL_MULTICALL_CONF_VIEW) {
193 vcui_view_multi_call_conf_priv_t *priv = data->priv;
194 /* ============ Check valid Evas Object ============= */
195 valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWCONF");
197 CALL_UI_DEBUG("[========== MULTIVIEWCONF : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
200 /* ============ Check valid Evas Object ============= */
201 edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO
203 CALL_UI_DEBUG("ERR : Null Evas_Object data->layout");
205 } else if (data->type == VIEW_INCALL_MULTICALL_LIST_VIEW) {
207 vcui_view_multi_call_list_priv_t *priv = data->priv;
208 /* ============ Check valid Evas Object ============= */
209 valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWLIST");
211 CALL_UI_DEBUG("[========== MULTIVIEWLIST : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
214 /* ============ Check valid Evas Object ============= */
215 edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO
217 CALL_UI_DEBUG("ERR : Null Evas_Object data->layout");
219 } else if (data->type == VIEW_INCALL_KEYPAD_VIEW) {
221 vcui_view_keypad_priv_t *priv = data->priv;
222 /* ============ Check valid Evas Object ============= */
223 valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW");
225 CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
228 /* ============ Check valid Evas Object ============= */
229 edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO
231 CALL_UI_DEBUG("ERR : Null Evas_Object data->layout");
233 } else if (data->type == VIEW_ENDCALL_VIEW) {
235 endcall_view_priv_t *priv = data->priv;
236 /* ============ Check valid Evas Object ============= */
237 valid = _vcui_check_valid_eo(priv->contents, "ENDCALLVIEW");
239 CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
242 /* ============ Check valid Evas Object ============= */
243 edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO
245 CALL_UI_DEBUG("ERR : Null Evas_Object data->layout");
248 /*to do nothing in case of other view.*/
253 void _vcui_view_common_set_each_time(time_t starttime)
256 //char call_duration[9];
257 unsigned long call_duration_in_sec = 0;
258 unsigned long sec = 0;
259 unsigned long min = 0;
260 unsigned long hr = 0;
262 curr_time = time(&curr_time);
263 call_duration_in_sec = curr_time - starttime;
264 sec = call_duration_in_sec % 60;
265 min = (call_duration_in_sec / 60) % 60;
266 hr = call_duration_in_sec / 3600;
268 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
270 // set the start time for every call
271 common_data->start_call_time = starttime;
272 CALL_UI_DEBUG(" common_data->start_call_time %lu", (unsigned long)common_data->start_call_time);
274 CALL_UI_DEBUG(" _vcui_view_common_set_each_time curr_time %d starttime %d", (int)curr_time, (int)starttime);
276 common_data->sec = sec;
277 common_data->min = min;
278 common_data->hour = hr;
280 char dur[TIME_BUF_LEN];
281 snprintf(dur, TIME_BUF_LEN, "%02d:%02d:%02d", common_data->hour, common_data->min, common_data->sec);
282 if (common_data->timer_flag == 1)
283 _vcui_view_common_set_text_time(dur);
285 CALL_UI_DEBUG(" complete input time");
289 void _vcui_view_common_timer_text_init()
291 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
293 if (!common_data->tm) {
294 if (common_data->timer_flag == 0) {
295 common_data->sec = 0;
296 common_data->min = 0;
297 common_data->hour = 0;
298 common_data->timer_flag = 1;
300 common_data->tm = ecore_timer_add(TIMER_TIMEOUT_1_SEC, __vcui_view_common_timer_cb, NULL);
304 void _vcui_view_common_timer_destroy()
306 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
307 if (common_data->tm) {
308 ecore_timer_del(common_data->tm);
309 common_data->tm = NULL;
313 void _vcui_view_common_timer_end_destroy()
315 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
316 if (common_data->tm_end) {
317 ecore_timer_del(common_data->tm_end);
318 common_data->tm_end = NULL;
322 void _vcui_view_common_timer_end_dialing_destroy()
324 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
325 if (common_data->tm_end_dialing) {
326 ecore_timer_del(common_data->tm_end_dialing);
327 common_data->tm_end_dialing = NULL;
331 void _vcui_view_common_timer_redial_reset()
334 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
336 _vcui_view_common_timer_end_destroy();
337 _vcui_view_common_timer_end_dialing_destroy();
338 common_data->time_end_flag = TIME_END_NO;
341 void _vcui_view_common_call_end_show_dialing(int end_type, int bredial)
343 CALL_UI_DEBUG("end_type:[%d]", end_type);
344 vcui_app_call_data_t *ad = _vcui_get_app_data();
345 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
346 char data[VC_DATA_LENGTH_MAX] = { 0, };
348 if (ad->call_end_type == CALL_END_TYPE_NONE) {
349 _vcui_view_dialing_draw_txt_ended(ad->view_st[ad->view_top], end_type);
350 } else if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) {
351 common_data->time_end_flag = TIME_END_START; // to stop timer from updating the call end screen
352 _vcui_view_common_set_text_time(_vcui_get_endcause_string(end_type, data));
355 if (common_data->tm_end_dialing) {
356 ecore_timer_del(common_data->tm_end_dialing);
357 common_data->tm_end_dialing = NULL;
359 common_data->bredial = bredial;
360 common_data->tm_end_dialing = ecore_timer_add(TIMER_TIMEOUT_2_SEC, __vcui_view_common_timer_end_dialing_cb, NULL);
364 void _vcui_view_common_call_end_show(time_t start_time, int end_type)
366 CALL_UI_DEBUG("end_type:[%d]", end_type);
367 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
369 if (common_data->tm_end) {
370 ecore_timer_del(common_data->tm_end);
371 common_data->tm_end = NULL;
373 common_data->time_end_flag = TIME_END_START;
374 _vcui_view_common_set_each_time(start_time);
376 common_data->end_type = end_type;
377 common_data->tm_end = ecore_timer_add(TIMER_TIMEOUT_0_3_SEC, __vcui_view_common_timer_end_cb, NULL);
380 void _vcui_view_common_call_end_timer_reset(void)
383 vcui_view_common_t *common_data = __vcui_view_common_get_common_data();
384 if (common_data->tm_end) {
385 ecore_timer_del(common_data->tm_end);
386 common_data->tm_end = NULL;
389 if (common_data->tm_end_dialing) {
390 ecore_timer_del(common_data->tm_end_dialing);
391 common_data->tm_end_dialing = NULL;
394 common_data->tm_end_force = ecore_timer_add(TIMER_TIMEOUT_2_SEC, __vcui_view_common_timer_end_force_cb, NULL);
397 int _vcui_view_common_call_terminate_or_view_change(void)
400 vcui_app_call_data_t *ad = _vcui_get_app_data();
402 if (_vcui_doc_get_count() == 0) {
403 if (ad->contact_ug == NULL) {
404 CALL_UI_DEBUG("EXIT - contact ug is closed");
407 CALL_UI_DEBUG("show contact ug");
408 CALL_UI_DEBUG("hide & destory [%d]", ad->view_top);
409 if (ad->view_top != -1) {
410 ad->view_st[ad->view_top]->onHide(ad->view_st[ad->view_top]);
411 ad->view_st[ad->view_top]->onDestroy(ad->view_st[ad->view_top]);
414 evas_object_show((Evas_Object *)ug_get_layout(ad->contact_ug));
417 _vcui_view_auto_change();