apply FSL(Flora Software License)
[apps/home/call.git] / ui / 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.h"\r
23 #include "vcui-view-incoming-lock.h"\r
24 #include "vcui-view-single-call.h"\r
25 #include "vcui-view-multi-call-list.h"\r
26 #include "vcui-view-multi-call-split.h"\r
27 #include "vcui-view-multi-call-conf.h"\r
28 #include "vcui-view-keypad.h"\r
29 #include "vcui-view-callend.h"\r
30 static const char *vcui_view_name[] = {\r
31                 "VIEW_DIALLING_VIEW",\r
32                 "VIEW_INCOMING_VIEW",\r
33                 "VIEW_INCOMING_LOCK_VIEW",\r
34                 "VIEW_INCALL_ONECALL_VIEW",\r
35                 "VIEW_INCALL_MULTICALL_SPLIT_VIEW",\r
36                 "VIEW_INCALL_MULTICALL_CONF_VIEW",\r
37                 "VIEW_INCALL_MULTICALL_LIST_VIEW",\r
38                 "VIEW_INCALL_KEYPAD_VIEW",\r
39                 "VIEW_ENDCALL_VIEW",\r
40                 "VIEW_MAX",\r
41 };\r
42 \r
43 void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2, void *param3)\r
44 {\r
45         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
46         int valid = 0;\r
47         CALL_UI_DEBUG("view:[%d] -> [%d]", ad->view_top, view_id);\r
48         if (view_id >= VIEW_MAX) {\r
49                 CALL_UI_DEBUG("[=========== ERROR!!!! Invalid View ID : %d =================]", view_id);\r
50                 return;\r
51         }\r
52         ad->ball_view_hide = EINA_FALSE;\r
53 #ifdef _DESTROY_UG_ALL_FORCE_\r
54         if (ad->ugs_array_data.ug_count != 0)\r
55                 _vcui_doc_launch_destroy_ug_all(&(ad->ugs_array_data));\r
56 #else\r
57         if (ad->ugs_array_data.ug_count != 0) {\r
58                 Eina_List *l;\r
59                 struct ui_gadget *ug;\r
60                 EINA_LIST_FOREACH(ad->ugs_array_data.ug_lists, l, ug) {\r
61                         CALL_UI_DEBUG("Destroy UG due to _vcui_view_change");\r
62                         ug_destroy(ug);\r
63                 }\r
64                 ad->ugs_array_data.ug_lists = eina_list_free(ad->ugs_array_data.ug_lists);\r
65                 ad->ugs_array_data.ug_count = 0;\r
66                 ad->ugs_array_data.last_ug_type = VCUI_UG_TYPE_NOE;\r
67         }\r
68 #endif\r
69         if (ad->view_st[view_id]) {\r
70                 CALL_UI_DEBUG("[============  Layout exists !! ============]");\r
71                 voice_call_view_data_t *vd = (voice_call_view_data_t *) ad->view_st[view_id];\r
72                 if (vd->layout) {\r
73                         if (view_id == VIEW_DIALLING_VIEW) {\r
74                                 vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *) vd->priv;\r
75                                 valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW");\r
76                         } else if (view_id == VIEW_INCOMING_VIEW) {\r
77                                 incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv;\r
78                                 valid = _vcui_check_valid_eo(priv->contents, "INCOMINGVIEW");\r
79                         } else if (view_id == VIEW_INCOMING_LOCK_VIEW) {\r
80                                 incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *) vd->priv;\r
81                                 valid = _vcui_check_valid_eo(priv->contents, "INCOMINGLOCKVIEW");\r
82                         } else if (view_id == VIEW_INCALL_ONECALL_VIEW) {\r
83                                 incall_one_view_priv_t *priv = (incall_one_view_priv_t *) vd->priv;\r
84                                 valid = _vcui_check_valid_eo(priv->contents, "ONEVIEW");\r
85                         } else if (view_id == VIEW_INCALL_MULTICALL_SPLIT_VIEW) {\r
86                                 incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *) vd->priv;\r
87                                 valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWSPLIT");\r
88                         } else if (view_id == VIEW_INCALL_MULTICALL_CONF_VIEW) {\r
89                                 vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *) vd->priv;\r
90                                 valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWCONF");\r
91                         } else if (view_id == VIEW_INCALL_MULTICALL_LIST_VIEW) {\r
92                                 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *) vd->priv;\r
93                                 valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWLIST");\r
94                         } else if (view_id == VIEW_INCALL_KEYPAD_VIEW) {\r
95                                 vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *) vd->priv;\r
96                                 valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW");\r
97                         } else if (view_id == VIEW_ENDCALL_VIEW) {\r
98                                 endcall_view_priv_t *priv = (endcall_view_priv_t *) vd->priv;\r
99                                 valid = _vcui_check_valid_eo(priv->contents, "ENDCALLVIEW");\r
100                         } else {\r
101                                 CALL_UI_DEBUG("[============ BAD INPUT!!!! Check Input Layout!!!!! %d============]", view_id);\r
102                         }\r
103                         if (valid == -1) {\r
104                                 CALL_UI_DEBUG("[========== WARNING!! Invalid Evas Object  ==========]");\r
105                                 ad->view_st[view_id] = NULL;\r
106 \r
107                                 /* free priv */\r
108                         }\r
109                 }\r
110         } else {\r
111                 CALL_UI_DEBUG("[============  Create Layout !! ============]");\r
112         }\r
113         ad->view_before_top = ad->view_top;     /* hold the current top window in the before_top pointer */\r
114         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
115         if (view_id == VIEW_DIALLING_VIEW || view_id == VIEW_INCOMING_VIEW || view_id == VIEW_INCOMING_LOCK_VIEW) {\r
116                 _vcui_raise_main_win();\r
117         }\r
118         if ((ad->view_before_top != -1) && (ad->view_before_top != view_id)) {\r
119                 CALL_UI_DEBUG("hide & destory [%d]", ad->view_before_top);\r
120                 CALL_UI_KPI("%s onHide start", vcui_view_name[ad->view_before_top]);\r
121                 ad->view_st[ad->view_before_top]->onHide(ad->view_st[ad->view_before_top]);\r
122                 CALL_UI_KPI("%s onHide done", vcui_view_name[ad->view_before_top]);\r
123                 CALL_UI_KPI("%s onDestroy start", vcui_view_name[ad->view_before_top]);\r
124                 ad->view_st[ad->view_before_top]->onDestroy(ad->view_st[ad->view_before_top]);\r
125                 CALL_UI_KPI("%s onDestroy done", vcui_view_name[ad->view_before_top]);\r
126         }\r
127         if (ad->view_st[view_id] == NULL) {\r
128                 CALL_UI_DEBUG("Create view data");\r
129                 voice_call_view_data_t *view_data = ad->func_new[view_id] (ad);\r
130                 ad->view_st[view_id] = view_data;\r
131         }\r
132         if (ad->view_st[view_id]->layout == NULL) {\r
133                 CALL_UI_DEBUG("Create layout");\r
134                 CALL_UI_KPI("%s onCreate start", vcui_view_name[view_id]);\r
135                 ad->view_st[view_id]->onCreate(ad->view_st[view_id], param1, param2, param3);\r
136                 CALL_UI_KPI("%s onCreate done", vcui_view_name[view_id]);\r
137         } else {\r
138                 CALL_UI_DEBUG("Update layout");\r
139                 CALL_UI_KPI("%s onUpdate start", vcui_view_name[view_id]);\r
140                 ad->view_st[view_id]->onUpdate(ad->view_st[view_id], param2, param3);\r
141                 CALL_UI_KPI("%s onUpdate done", vcui_view_name[view_id]);\r
142         }\r
143         _vcui_show_main_ui_set_flag();\r
144         CALL_UI_DEBUG("End");\r
145 }\r
146 \r
147 void _vcui_view_auto_change()\r
148 {\r
149         CALL_UI_DEBUG("..");\r
150         if (_vcui_doc_get_count_nostatus() == 1) {\r
151                 call_data_t *call_data = _vcui_doc_get_all_recent();\r
152                 if (call_data->mo_mt_status == CALL_OUTGOING) {\r
153                         _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL);\r
154                 } else if (call_data->mo_mt_status == CALL_INCOMING) {\r
155                         if (_vcui_is_idle_lock() == CALL_UNLOCK)\r
156                                 _vcui_view_change(VIEW_INCOMING_VIEW, 0, NULL, NULL);\r
157 \r
158                         else\r
159                                 _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, 0, NULL, NULL);\r
160                 } else {\r
161                         CALL_UI_DEBUG("ERROR");\r
162                 }\r
163         } else if (_vcui_doc_get_count() > 1) {\r
164                 if (_vcui_doc_get_count_unhold() == 0 || _vcui_doc_get_count_hold() == 0) {\r
165                         _vcui_view_change(VIEW_INCALL_MULTICALL_CONF_VIEW, 0, NULL, NULL);\r
166                 } else {\r
167                         _vcui_view_change(VIEW_INCALL_MULTICALL_SPLIT_VIEW, 0, NULL, NULL);\r
168                 }\r
169         } else {\r
170                 _vcui_view_change(VIEW_INCALL_ONECALL_VIEW, 0, NULL, NULL);\r
171         }\r
172         CALL_UI_DEBUG("End..");\r
173 }\r
174 \r
175 void _vcui_view_all_hide()\r
176 {\r
177         int i = 0;\r
178         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
179         for (i = 0; i < VIEW_MAX; i++) {\r
180                 if (ad->view_st[i] != NULL) {\r
181                         ad->view_st[i]->onHide(ad->view_st[i]);\r
182                 }\r
183         }\r
184         ad->ball_view_hide = EINA_TRUE;\r
185         _vcui_show_main_ui_set_flag();\r
186 }\r
187 \r
188 void _vcui_view_update()\r
189 {\r
190         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
191         if (ad->view_top != -1 && ad->view_st[ad->view_top] != NULL) {\r
192                 ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL);\r
193         }\r
194         _vcui_show_main_ui_set_flag();\r
195 }\r
196 \r
197 void _vcui_view_destroy(vcui_app_call_view_id_t view_id)\r
198 {\r
199         CALL_UI_DEBUG("view_id:[%d]", view_id);\r
200         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
201         if (ad->view_st[view_id]) {\r
202                 ad->view_st[view_id]->onHide(ad->view_st[view_id]);\r
203                 ad->view_st[view_id]->onDestroy(ad->view_st[view_id]);\r
204         }\r
205 }\r