apply FSL(Flora Software License)
[apps/home/call.git] / ui / src / vcui-view-choice.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-app-data.h"\r
20 #include "vcui-view-choice.h"\r
21 #include "vcui-view-dialing.h"\r
22 #include "vcui-view-incoming-lock.h"\r
23 #include "vcui-view-single-call.h"\r
24 #include "vcui-view-multi-call-list.h"\r
25 #include "vcui-view-multi-call-split.h"\r
26 #include "vcui-view-multi-call-conf.h"\r
27 #include "vcui-view-keypad.h"\r
28 #include "vcui-view-callend.h"\r
29 static const char *vcui_view_name[] = {\r
30                 "VIEW_DIALLING_VIEW",\r
31                 "VIEW_INCOMING_LOCK_VIEW",\r
32                 "VIEW_INCALL_ONECALL_VIEW",\r
33                 "VIEW_INCALL_MULTICALL_SPLIT_VIEW",\r
34                 "VIEW_INCALL_MULTICALL_CONF_VIEW",\r
35                 "VIEW_INCALL_MULTICALL_LIST_VIEW",\r
36                 "VIEW_ENDCALL_VIEW",\r
37                 "VIEW_QUICKPANEL_VIEW",\r
38                 "VIEW_MAX",\r
39 };\r
40 \r
41 void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2, void *param3)\r
42 {\r
43         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
44         int valid = 0;\r
45         CALL_UI_DEBUG("view:[%d] -> [%d]", ad->view_top, view_id);\r
46         if (view_id >= VIEW_MAX) {\r
47                 CALL_UI_DEBUG("[=========== ERROR!!!! Invalid View ID : %d =================]", view_id);\r
48                 return;\r
49         }\r
50         ad->ball_view_hide = EINA_FALSE;\r
51 #ifdef _DESTROY_UG_ALL_FORCE_\r
52         if (ad->ugs_array_data.ug_count != 0)\r
53                 _vcui_doc_launch_destroy_ug_all(&(ad->ugs_array_data));\r
54 #else\r
55         if (ad->ugs_array_data.ug_count != 0) {\r
56                 Eina_List *l = NULL;\r
57                 ui_gadget_h ug = NULL;\r
58                 EINA_LIST_FOREACH(ad->ugs_array_data.ug_lists, l, ug) {\r
59                         CALL_UI_DEBUG("Destroy UG due to _vcui_view_change");\r
60                         ug_destroy(ug);\r
61                 }\r
62                 ad->ugs_array_data.ug_lists = eina_list_free(ad->ugs_array_data.ug_lists);\r
63                 ad->ugs_array_data.ug_count = 0;\r
64                 ad->ugs_array_data.last_ug_type = VCUI_UG_TYPE_NOE;\r
65                 ad->contact_ug = NULL;\r
66         }\r
67 #endif\r
68         if (ad->view_st[view_id]) {\r
69                 CALL_UI_DEBUG("[============  Layout exists !! ============]");\r
70                 voice_call_view_data_t *vd = (voice_call_view_data_t *) ad->view_st[view_id];\r
71                 if (vd->layout) {\r
72                         if (view_id == VIEW_DIALLING_VIEW) {\r
73                                 valid = _vc_ui_view_dialing_check_valid_eo(vd);\r
74                         } else if (view_id == VIEW_INCOMING_LOCK_VIEW) {\r
75                                 valid = _vc_ui_view_incoming_lock_check_valid_eo(vd);\r
76                         } else if (view_id == VIEW_INCALL_ONECALL_VIEW) {\r
77                                 valid = _vc_ui_view_single_call_check_valid_eo(vd);\r
78                         } else if (view_id == VIEW_INCALL_MULTICALL_SPLIT_VIEW) {\r
79                                 valid = _vcui_view_multi_call_split_check_valid_eo(vd);\r
80                         } else if (view_id == VIEW_INCALL_MULTICALL_CONF_VIEW) {\r
81                                 valid = _vcui_view_multi_call_conf_check_valid_eo(vd);\r
82                         } else if (view_id == VIEW_INCALL_MULTICALL_LIST_VIEW) {\r
83                                 valid = _vcui_view_multi_call_list_check_valid_eo(vd);\r
84                         } else if (view_id == VIEW_ENDCALL_VIEW) {\r
85                                 valid = _vc_ui_view_callend_check_valid_eo(vd);\r
86                         } else {\r
87                                 CALL_UI_DEBUG("[============ BAD INPUT!!!! Check Input Layout!!!!! %d============]", view_id);\r
88                         }\r
89                         if (valid == -1) {\r
90                                 CALL_UI_DEBUG("[========== WARNING!! Invalid Evas Object  ==========]");\r
91                                 ad->view_st[view_id] = NULL;\r
92                                 /* free priv */\r
93                         }\r
94                 }\r
95         } else {\r
96                 CALL_UI_DEBUG("[============  Create Layout !! ============]");\r
97         }\r
98         ad->view_before_top = ad->view_top;     /* hold the current top window in the before_top pointer */\r
99         ad->view_top = view_id; /* set the new top window to the view_id which is passed... this step enables in setting 00:00:00 as timer */\r
100         if (view_id == VIEW_DIALLING_VIEW || view_id == VIEW_INCOMING_LOCK_VIEW) {\r
101                 _vcui_raise_main_win();\r
102         }\r
103         if ((ad->view_before_top != -1) && (ad->view_before_top != view_id)) {\r
104                 CALL_UI_DEBUG("hide & destroy [%d]", ad->view_before_top);\r
105                 CALL_UI_KPI("%s onHide start", vcui_view_name[ad->view_before_top]);\r
106                 ad->view_st[ad->view_before_top]->onHide(ad->view_st[ad->view_before_top]);\r
107                 CALL_UI_KPI("%s onHide done", vcui_view_name[ad->view_before_top]);\r
108                 CALL_UI_KPI("%s onDestroy start", vcui_view_name[ad->view_before_top]);\r
109                 ad->view_st[ad->view_before_top]->onDestroy(ad->view_st[ad->view_before_top]);\r
110                 CALL_UI_KPI("%s onDestroy done", vcui_view_name[ad->view_before_top]);\r
111         }\r
112         if (ad->view_st[view_id] == NULL) {\r
113                 CALL_UI_DEBUG("Create view data");\r
114                 voice_call_view_data_t *view_data = ad->func_new[view_id] (ad);\r
115                 ad->view_st[view_id] = view_data;\r
116         }\r
117         if (ad->view_st[view_id]->layout == NULL) {\r
118                 CALL_UI_DEBUG("Create layout");\r
119                 CALL_UI_KPI("%s onCreate start", vcui_view_name[view_id]);\r
120                 ad->view_st[view_id]->onCreate(ad->view_st[view_id], param1, param2, param3);\r
121                 CALL_UI_KPI("%s onCreate done", vcui_view_name[view_id]);\r
122         } else {\r
123                 CALL_UI_DEBUG("Update layout");\r
124                 CALL_UI_KPI("%s onUpdate start", vcui_view_name[view_id]);\r
125                 ad->view_st[view_id]->onUpdate(ad->view_st[view_id], param2, param3);\r
126                 CALL_UI_KPI("%s onUpdate done", vcui_view_name[view_id]);\r
127         }\r
128         _vcui_show_main_ui_set_flag();\r
129         CALL_UI_DEBUG("End");\r
130 }\r
131 \r
132 void _vcui_view_auto_change()\r
133 {\r
134         CALL_UI_DEBUG("..");\r
135 \r
136         void *data = _vcui_view_get_second_mtcall_popup_data();\r
137         _vcui_view_popup_second_mtcall_unload(data);\r
138 \r
139         if (_vcui_doc_get_no_status_call_data_count() == 1) {\r
140                 call_data_t *call_data = _vcui_doc_get_recent_call_data();\r
141                 int call_type = _vcui_doc_get_call_type(call_data);\r
142                 if (call_type == CALL_OUTGOING) {\r
143                         _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL);\r
144                 } else if (call_type == CALL_INCOMING) {\r
145                         _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, 0, NULL, NULL);\r
146                 } else {\r
147                         CALL_UI_DEBUG("ERROR");\r
148                 }\r
149         } else if (_vcui_doc_get_all_call_data_count() > 1) {\r
150                 if (_vcui_doc_get_unhold_call_data_count() == 0 || _vcui_doc_get_hold_call_data_count() == 0) {\r
151                         _vcui_view_change(VIEW_INCALL_MULTICALL_CONF_VIEW, 0, NULL, NULL);\r
152                 } else {\r
153                         _vcui_view_change(VIEW_INCALL_MULTICALL_SPLIT_VIEW, 0, NULL, NULL);\r
154                 }\r
155         } else {\r
156                 _vcui_view_change(VIEW_INCALL_ONECALL_VIEW, 0, NULL, NULL);\r
157         }\r
158         CALL_UI_DEBUG("End..");\r
159 }\r
160 \r
161 void _vcui_view_all_hide()\r
162 {\r
163         int i = 0;\r
164         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
165         for (i = 0; i < VIEW_MAX; i++) {\r
166                 if (ad->view_st[i] != NULL) {\r
167                         ad->view_st[i]->onHide(ad->view_st[i]);\r
168                 }\r
169         }\r
170         ad->ball_view_hide = EINA_TRUE;\r
171         _vcui_show_main_ui_set_flag();\r
172 }\r
173 \r
174 void _vcui_view_update()\r
175 {\r
176         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
177         if (ad->view_top != -1 && ad->view_st[ad->view_top] != NULL) {\r
178                 ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL);\r
179         }\r
180         _vcui_show_main_ui_set_flag();\r
181 }\r
182 \r
183 void _vcui_view_destroy(vcui_app_call_view_id_t view_id)\r
184 {\r
185         CALL_UI_DEBUG("view_id:[%d]", view_id);\r
186         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
187         if (ad->view_st[view_id]) {\r
188                 ad->view_st[view_id]->onHide(ad->view_st[view_id]);\r
189                 ad->view_st[view_id]->onDestroy(ad->view_st[view_id]);\r
190         }\r
191 }\r
192 \r
193 void _vcui_view_quickpanel_change()\r
194 {\r
195 #ifdef  _QUICKPANNEL_SUPPORT_\r
196         CALL_UI_DEBUG("..");\r
197         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
198         if (ad->win_quickpanel) {\r
199                 if (_vcui_doc_get_all_call_data_count() < 1) {\r
200                         CALL_UI_DEBUG("destroy quickpanel");\r
201                         ad->view_st[VIEW_QUICKPANEL_VIEW]->onHide(ad->view_st[VIEW_QUICKPANEL_VIEW]);\r
202                         ad->view_st[VIEW_QUICKPANEL_VIEW]->onDestroy(ad->view_st[VIEW_QUICKPANEL_VIEW]);\r
203                         ad->win_quickpanel = NULL;\r
204                 } else {\r
205                         if (ad->view_st[VIEW_QUICKPANEL_VIEW]->layout != NULL) {\r
206                                 CALL_UI_DEBUG("update quickpanel");\r
207                                 ad->view_st[VIEW_QUICKPANEL_VIEW]->onUpdate(ad->view_st[VIEW_QUICKPANEL_VIEW], NULL, NULL);\r
208                         }\r
209                 }\r
210         } else {\r
211                 CALL_UI_DEBUG("create quickpanel");\r
212                 if (ad->view_st[VIEW_QUICKPANEL_VIEW] == NULL) {\r
213                         voice_call_view_data_t *view_data = ad->func_new[VIEW_QUICKPANEL_VIEW] (ad);\r
214                         ad->view_st[VIEW_QUICKPANEL_VIEW] = view_data;\r
215                 }\r
216                 if (ad->view_st[VIEW_QUICKPANEL_VIEW]->layout == NULL) {\r
217                         CALL_UI_DEBUG("create!!");\r
218                         ad->view_st[VIEW_QUICKPANEL_VIEW]->onCreate(ad->view_st[VIEW_QUICKPANEL_VIEW], 0, NULL, NULL);\r
219                 }\r
220         }\r
221 #else\r
222         CALL_UI_DEBUG("Not applied yet");\r
223 #endif\r
224 }\r