apply FSL(Flora Software License)
[apps/home/call.git] / ui / vcui-document.c
1 /*\r
2  * Copyright 2012  Samsung Electronics Co., Ltd\r
3  *\r
4  * Licensed under the Flora License, Version 1.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.tizenopensource.org/license\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 \r
18 #include "vcui-application.h"\r
19 #include "vcui-document.h"\r
20 \r
21 static call_data_t *recent_mo;\r
22 static call_data_t *recent_mt;\r
23 static call_data_t *recent_mt_mo;\r
24 static Eina_List *caller_list;\r
25 \r
26 void _vcui_doc_recent_init()\r
27 {\r
28         recent_mo = NULL;\r
29         recent_mt = NULL;\r
30         recent_mt_mo = NULL;\r
31 }\r
32 \r
33 call_data_t *_vcui_doc_get_recent_mo()\r
34 {\r
35         return recent_mo;\r
36 }\r
37 \r
38 call_data_t *_vcui_doc_get_recent_mt()\r
39 {\r
40         return recent_mt;\r
41 }\r
42 \r
43 call_data_t *_vcui_doc_get_all_recent()\r
44 {\r
45         CALL_UI_DEBUG("..");\r
46         if (recent_mt_mo == NULL) {\r
47                 CALL_UI_DEBUG("recent is NULL");\r
48                 if (recent_mo != NULL) {\r
49                         recent_mt_mo = recent_mo;\r
50                         CALL_UI_DEBUG("recent is mo");\r
51                 } else if (recent_mt != NULL) {\r
52                         recent_mt_mo = recent_mt;\r
53                         CALL_UI_DEBUG("recent is mt");\r
54                 }\r
55         }\r
56         return recent_mt_mo;\r
57 }\r
58 \r
59 void _vcui_doc_set_all_recent(call_data_t *in)\r
60 {\r
61         CALL_UI_DEBUG("..");\r
62         if (in == NULL) {\r
63                 CALL_UI_DEBUG("set recent_mt_mo to null");\r
64         }\r
65         recent_mt_mo = in;\r
66 }\r
67 \r
68 void _vcui_doc_set_mo_recent(call_data_t *in)\r
69 {\r
70         CALL_UI_DEBUG("..");\r
71         if (in == NULL) {\r
72                 CALL_UI_DEBUG("set recent_mo to null");\r
73         }\r
74         if (recent_mo != NULL && recent_mo->call_handle == NO_HANDLE) {\r
75                 CALL_UI_DEBUG("Set_recent 1");\r
76                 free(recent_mo);\r
77                 recent_mo = NULL;\r
78         }\r
79         _vcui_doc_set_all_recent(in);\r
80         recent_mo = in;\r
81 }\r
82 \r
83 void _vcui_doc_set_mt_recent(call_data_t *in)\r
84 {\r
85         CALL_UI_DEBUG("..");\r
86         if (in == NULL) {\r
87                 CALL_UI_DEBUG("set recent_mt to null");\r
88         }\r
89         _vcui_doc_set_all_recent(in);\r
90         recent_mt = in;\r
91 }\r
92 \r
93 void _vcui_doc_caller_list_init()\r
94 {\r
95         caller_list = NULL;\r
96 }\r
97 \r
98 int _vcui_doc_is_call_data(call_data_t *in)\r
99 {\r
100         if (in == NULL)\r
101                 return EINA_FALSE;\r
102         Eina_List *l;\r
103         call_data_t *cd;\r
104         EINA_LIST_FOREACH(caller_list, l, cd) {\r
105                 if (cd == in) {\r
106                         return EINA_TRUE;\r
107                 }\r
108         }\r
109 \r
110         return EINA_FALSE;\r
111 }\r
112 \r
113 void _vcui_doc_add_call_data(call_data_t *in)\r
114 {\r
115         if (in == NULL)\r
116                 return;\r
117         Eina_List *l;\r
118         call_data_t *cd;\r
119         EINA_LIST_FOREACH(caller_list, l, cd) {\r
120                 if (cd == in) {\r
121                         return;\r
122                 }\r
123         }\r
124 \r
125         caller_list = eina_list_append(caller_list, (void *)in);\r
126 }\r
127 \r
128 void _vcui_doc_update_call_data(call_data_t *in)\r
129 {\r
130         if (in == NULL)\r
131                 return;\r
132         Eina_List *l;\r
133         call_data_t *cd;\r
134         EINA_LIST_FOREACH(caller_list, l, cd) {\r
135                 if (cd == in) {\r
136                         *cd = *in;\r
137                         return;\r
138                 }\r
139         }\r
140 }\r
141 \r
142 void _vcui_doc_remove_all_data()\r
143 {\r
144         Eina_List *l;\r
145         call_data_t *cd;\r
146         EINA_LIST_FOREACH(caller_list, l, cd) {\r
147                 if (cd != NULL) {\r
148                         free(cd);\r
149                         cd = NULL;\r
150                 }\r
151         }\r
152         eina_list_free(caller_list);\r
153         caller_list = NULL;\r
154 }\r
155 \r
156 call_data_t *_vcui_doc_remove_call_data_only_list(call_data_t *in)\r
157 {\r
158         if (in == NULL) {\r
159                 CALL_UI_DEBUG("Call data is Null");\r
160                 return NULL;\r
161         }\r
162         Eina_List *l;\r
163         call_data_t *cd;\r
164         EINA_LIST_FOREACH(caller_list, l, cd) {\r
165                 if (cd == in) {\r
166                         caller_list = eina_list_remove(caller_list, in);\r
167                         return in;\r
168                 }\r
169         }\r
170         return NULL;\r
171 }\r
172 \r
173 void _vcui_doc_remove_call_data(call_data_t *in)\r
174 {\r
175         if (in == NULL) {\r
176                 CALL_UI_DEBUG("Call data is Null");\r
177                 return;\r
178         }\r
179         Eina_List *l;\r
180         call_data_t *cd;\r
181         EINA_LIST_FOREACH(caller_list, l, cd) {\r
182                 if (cd == in) {\r
183                         if (in == _vcui_doc_get_recent_mo())\r
184                                 _vcui_doc_set_mo_recent(NULL);\r
185                         if (in == _vcui_doc_get_recent_mt())\r
186                                 _vcui_doc_set_mt_recent(NULL);\r
187 \r
188                         caller_list = eina_list_remove(caller_list, in);\r
189                         free(in);\r
190                         in = NULL;\r
191                         CALL_UI_DEBUG("Call data removed");\r
192                         break;\r
193                 }\r
194 \r
195         }\r
196 \r
197         if (_vcui_doc_get_count() == 0) {\r
198                 eina_list_free(caller_list);\r
199                 caller_list = NULL;\r
200         }\r
201 \r
202 }\r
203 \r
204 call_data_t *_vcui_doc_get_call_handle(int handle)\r
205 {\r
206         Eina_List *l;\r
207         call_data_t *cd;\r
208         EINA_LIST_FOREACH(caller_list, l, cd) {\r
209                 if (cd != NULL) {\r
210                         if (cd->call_handle == handle) {\r
211                                 return cd;\r
212                         }\r
213                 }\r
214         }\r
215         return NULL;\r
216 }\r
217 \r
218 call_data_t *_vcui_doc_get_first_unhold()\r
219 {\r
220         Eina_List *l;\r
221         call_data_t *cd;\r
222         EINA_LIST_FOREACH(caller_list, l, cd) {\r
223                 if (cd != NULL) {\r
224                         if (cd->caller_status == CALL_UNHOLD) {\r
225                                 return cd;\r
226                         }\r
227                 }\r
228         }\r
229         return NULL;\r
230 }\r
231 \r
232 call_data_t *_vcui_doc_get_first_hold()\r
233 {\r
234         Eina_List *l;\r
235         call_data_t *cd;\r
236         EINA_LIST_FOREACH(caller_list, l, cd) {\r
237                 if (cd != NULL) {\r
238                         if (cd->caller_status == CALL_HOLD) {\r
239                                 return cd;\r
240                         }\r
241                 }\r
242         }\r
243         return NULL;\r
244 }\r
245 \r
246 call_data_t *_vcui_doc_get_last_status(int call_status)\r
247 {\r
248 \r
249         Eina_List *l;\r
250         call_data_t *fast_cd = NULL;\r
251         call_data_t *cd;\r
252         int i = 0;\r
253         EINA_LIST_FOREACH(caller_list, l, cd) {\r
254                 if (cd != NULL) {\r
255                         if (cd->caller_status == call_status) {\r
256                                 if (i == 0) {\r
257                                         fast_cd = cd;\r
258                                         i++;\r
259                                         continue;\r
260                                 } else {\r
261                                         if (fast_cd->start_time > cd->start_time) {\r
262                                                 fast_cd = cd;\r
263                                         }\r
264                                 }\r
265                                 i++;\r
266                         }\r
267                 }\r
268         }\r
269         return fast_cd;\r
270 }\r
271 \r
272 call_data_t *_vcui_doc_get_last_type_mo()\r
273 {\r
274 \r
275         Eina_List *l;\r
276         call_data_t *last_cd = NULL;\r
277         call_data_t *cd;\r
278         int i = 0;\r
279         EINA_LIST_FOREACH(caller_list, l, cd) {\r
280                 if (cd != NULL) {\r
281                         if (cd->mo_mt_status == CALL_OUTGOING) {\r
282                                 if (i == 0) {\r
283                                         last_cd = cd;\r
284                                         i++;\r
285                                         continue;\r
286                                 } else {\r
287                                         if (last_cd->start_time < cd->start_time) {\r
288                                                 last_cd = cd;\r
289                                         }\r
290                                 }\r
291                                 i++;\r
292                         }\r
293                 }\r
294         }\r
295         return last_cd;\r
296 }\r
297 \r
298 call_data_t *_vcui_doc_get_first()\r
299 {\r
300         Eina_List *l;\r
301         call_data_t *cd;\r
302         EINA_LIST_FOREACH(caller_list, l, cd)\r
303             if (cd != NULL) {\r
304                 return cd;\r
305         }\r
306         return NULL;\r
307 }\r
308 \r
309 void _vcui_doc_set_unhold_all()\r
310 {\r
311         Eina_List *l;\r
312         call_data_t *cd;\r
313         EINA_LIST_FOREACH(caller_list, l, cd) {\r
314                 if (cd != NULL) {\r
315                         if (cd->caller_status == CALL_HOLD) {\r
316                                 cd->caller_status = CALL_UNHOLD;\r
317                         }\r
318                 }\r
319         }\r
320 }\r
321 \r
322 void _vcui_doc_set_hold_all()\r
323 {\r
324         Eina_List *l;\r
325         call_data_t *cd;\r
326         EINA_LIST_FOREACH(caller_list, l, cd) {\r
327                 if (cd != NULL) {\r
328                         if (cd->caller_status == CALL_UNHOLD) {\r
329                                 cd->caller_status = CALL_HOLD;\r
330                         }\r
331                 }\r
332         }\r
333 }\r
334 \r
335 void _vcui_doc_set_swap_all()\r
336 {\r
337         Eina_List *l;\r
338         call_data_t *cd;\r
339         EINA_LIST_FOREACH(caller_list, l, cd) {\r
340                 if (cd != NULL) {\r
341                         if (cd->caller_status == CALL_HOLD) {\r
342                                 cd->caller_status = CALL_UNHOLD;\r
343                         } else if (cd->caller_status == CALL_UNHOLD) {\r
344                                 cd->caller_status = CALL_HOLD;\r
345                         }\r
346                 }\r
347         }\r
348 }\r
349 \r
350 int _vcui_doc_get_show_callstatus()\r
351 {\r
352         if (_vcui_doc_get_count() > 1) {\r
353                 if (_vcui_doc_get_count_hold() > 1)\r
354                         return CALL_HOLD;\r
355                 else\r
356                         return CALL_UNHOLD;\r
357         } else\r
358                 return CALL_UNHOLD;\r
359 }\r
360 \r
361 int _vcui_doc_get_count()\r
362 {\r
363         int i = eina_list_count(caller_list);\r
364         return i;\r
365 }\r
366 \r
367 int _vcui_doc_get_count_hold()\r
368 {\r
369         int i = 0;\r
370         Eina_List *l;\r
371         call_data_t *cd;\r
372         EINA_LIST_FOREACH(caller_list, l, cd) {\r
373                 if (cd != NULL) {\r
374                         if (cd->caller_status == CALL_HOLD) {\r
375                                 i++;\r
376                         }\r
377                 }\r
378         }\r
379         CALL_UI_DEBUG("(%d)",i);\r
380         return i;\r
381 }\r
382 \r
383 int _vcui_doc_get_count_unhold()\r
384 {\r
385         int i = 0;\r
386         Eina_List *l;\r
387         call_data_t *cd;\r
388         EINA_LIST_FOREACH(caller_list, l, cd) {\r
389                 if (cd != NULL) {\r
390                         if (cd->caller_status == CALL_UNHOLD) {\r
391                                 i++;\r
392                         }\r
393                 }\r
394         }\r
395         CALL_UI_DEBUG("(%d)",i);\r
396         return i;\r
397 }\r
398 \r
399 int _vcui_doc_get_count_nostatus()\r
400 {\r
401         int i = 0;\r
402         Eina_List *l;\r
403         call_data_t *cd;\r
404         EINA_LIST_FOREACH(caller_list, l, cd) {\r
405                 if (cd != NULL) {\r
406                         if (cd->caller_status == NO_STATUS) {\r
407                                 i++;\r
408                         }\r
409                 }\r
410         }\r
411         return i;\r
412 }\r
413 \r
414 Eina_List *_vcui_doc_get_hold_caller()\r
415 {\r
416         if (_vcui_doc_get_count() == 0)\r
417                 return NULL;\r
418         Eina_List *hold_list = NULL;\r
419         Eina_List *l;\r
420         call_data_t *cd;\r
421 \r
422         EINA_LIST_FOREACH(caller_list, l, cd) {\r
423                 if (cd != NULL) {\r
424                         if (cd->caller_status == CALL_HOLD) {\r
425                                 hold_list = eina_list_append(hold_list, cd);\r
426                         }\r
427                 }\r
428         }\r
429         return hold_list;\r
430 }\r
431 \r
432 Eina_List *_vcui_doc_get_unhold_caller()\r
433 {\r
434         if (_vcui_doc_get_count() == 0)\r
435                 return NULL;\r
436         Eina_List *unhold_list = NULL;\r
437         Eina_List *l;\r
438         call_data_t *cd;\r
439 \r
440         EINA_LIST_FOREACH(caller_list, l, cd) {\r
441                 if (cd != NULL) {\r
442                         CALL_UI_DEBUG("_vcui_doc_get_unhold_caller");\r
443                         if (cd->caller_status == CALL_UNHOLD) {\r
444                                 CALL_UI_DEBUG("find it");\r
445                                 unhold_list = eina_list_append(unhold_list, cd);\r
446                         }\r
447                 }\r
448         }\r
449         return unhold_list;\r
450 }\r
451 \r
452 Eina_List *_vcui_doc_get_caller()\r
453 {\r
454         if (_vcui_doc_get_count() == 0)\r
455                 return NULL;\r
456 \r
457         Eina_List *list = NULL;\r
458         Eina_List *l;\r
459         call_data_t *cd;\r
460 \r
461         EINA_LIST_FOREACH(caller_list, l, cd) {\r
462                 list = eina_list_append(list, cd);\r
463         }\r
464         return list;\r
465 }\r
466 \r
467 void _vcui_doc_all_print_address()\r
468 {\r
469         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
470         CALL_UI_DEBUG("----------address----------");\r
471         CALL_UI_DEBUG("View Data : DIALING VIEW %p", ad->view_st[VIEW_DIALLING_VIEW]);\r
472         CALL_UI_DEBUG("View Data : INCOMING VIEW %p", ad->view_st[VIEW_INCOMING_VIEW]);\r
473         CALL_UI_DEBUG("View Data : INCOMING LOCK VIEW %p", ad->view_st[VIEW_INCOMING_LOCK_VIEW]);\r
474         CALL_UI_DEBUG("View Data : INCALL ONEVIEW %p", ad->view_st[VIEW_INCALL_ONECALL_VIEW]);\r
475         CALL_UI_DEBUG("View Data : INCALL MULTIVIEW SPLIT %p", ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW]);\r
476         CALL_UI_DEBUG("View Data : INCALL MULTIVIEW CONF %p", ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW]);\r
477         CALL_UI_DEBUG("View Data : INCALL MULTIVIEW LIST %p", ad->view_st[VIEW_INCALL_MULTICALL_LIST_VIEW]);\r
478         CALL_UI_DEBUG("View Data : INCALL KEYPAD %p", ad->view_st[VIEW_INCALL_KEYPAD_VIEW]);\r
479         CALL_UI_DEBUG(" --------------------------");\r
480 \r
481 }\r
482 \r
483 void _vcui_doc_all_print(char *msg_pos)\r
484 {\r
485         CALL_UI_DEBUG(" --------%s------------", msg_pos);\r
486         Eina_List *l;\r
487         call_data_t *cd;\r
488         EINA_LIST_FOREACH(caller_list, l, cd) {\r
489                 if (cd != NULL) {\r
490                         CALL_UI_DEBUG(" call_handle %d", cd->call_handle);\r
491                         CALL_UI_DEBUG(" call_num %s", cd->call_num);\r
492                         CALL_UI_DEBUG(" call_display %s", cd->call_display);\r
493                         CALL_UI_DEBUG(" call_file_path %s", cd->call_file_path);\r
494                         CALL_UI_DEBUG(" call_full_file_path %s", cd->call_full_file_path);\r
495                         CALL_UI_DEBUG(" caller_status %d", cd->caller_status);\r
496                         CALL_UI_DEBUG(" call_time %d", (int)(cd->start_time));\r
497                 }\r
498         }\r
499         CALL_UI_DEBUG(" --------------------------");\r
500 }\r
501 \r