2 * Copyright 2012 Samsung Electronics Co., Ltd
\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
8 * http://www.tizenopensource.org/license
\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
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
43 void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2, void *param3)
\r
45 vcui_app_call_data_t *ad = _vcui_get_app_data();
\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
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
57 if (ad->ugs_array_data.ug_count != 0) {
\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
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
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
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
101 CALL_UI_DEBUG("[============ BAD INPUT!!!! Check Input Layout!!!!! %d============]", view_id);
\r
104 CALL_UI_DEBUG("[========== WARNING!! Invalid Evas Object ==========]");
\r
105 ad->view_st[view_id] = NULL;
\r
111 CALL_UI_DEBUG("[============ Create Layout !! ============]");
\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
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
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
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
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
143 _vcui_show_main_ui_set_flag();
\r
144 CALL_UI_DEBUG("End");
\r
147 void _vcui_view_auto_change()
\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
159 _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, 0, NULL, NULL);
\r
161 CALL_UI_DEBUG("ERROR");
\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
167 _vcui_view_change(VIEW_INCALL_MULTICALL_SPLIT_VIEW, 0, NULL, NULL);
\r
170 _vcui_view_change(VIEW_INCALL_ONECALL_VIEW, 0, NULL, NULL);
\r
172 CALL_UI_DEBUG("End..");
\r
175 void _vcui_view_all_hide()
\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
184 ad->ball_view_hide = EINA_TRUE;
\r
185 _vcui_show_main_ui_set_flag();
\r
188 void _vcui_view_update()
\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
194 _vcui_show_main_ui_set_flag();
\r
197 void _vcui_view_destroy(vcui_app_call_view_id_t view_id)
\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