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-incoming.h"
20 #include "vcui-view-elements.h"
22 static int __vcui_view_incoming_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
23 static int __vcui_view_incoming_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
24 static int __vcui_view_incoming_onhide(voice_call_view_data_t *view_data);
25 static int __vcui_view_incoming_onshow(voice_call_view_data_t *view_data);
26 static int __vcui_view_incoming_destroy(voice_call_view_data_t *view_data);
28 static voice_call_view_data_t s_view = {
29 .type = VIEW_INCOMING_VIEW,
32 .onCreate = __vcui_view_incoming_oncreate,
33 .onUpdate = __vcui_view_incoming_onupdate,
34 .onHide = __vcui_view_incoming_onhide,
35 .onShow = __vcui_view_incoming_onshow,
36 .onDestroy = __vcui_view_incoming_destroy,
40 voice_call_view_data_t *_vcui_view_incoming_new(vcui_app_call_data_t *ad)
44 s_view.priv = calloc(1, sizeof(incoming_view_priv_t));
47 CALL_UI_DEBUG("ERROR!!!!!!!!!!! ");
53 static void __vcui_view_incoming_clear_button(Evas_Object *eo)
57 sw = edje_object_part_swallow_get(_EDJ(eo), "btn_accept");
59 edje_object_part_unswallow(_EDJ(eo), sw);
62 sw = edje_object_part_swallow_get(_EDJ(eo), "btn_reject");
64 edje_object_part_unswallow(_EDJ(eo), sw);
67 sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming1");
69 edje_object_part_unswallow(_EDJ(eo), sw);
72 sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming2");
74 edje_object_part_unswallow(_EDJ(eo), sw);
77 sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming3");
79 edje_object_part_unswallow(_EDJ(eo), sw);
82 sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming4");
84 edje_object_part_unswallow(_EDJ(eo), sw);
89 static void __vcui_view_incoming_draw_screen(Evas_Object *eo, void *data)
93 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
94 incoming_view_priv_t *priv = (incoming_view_priv_t *)vd->priv;
95 vcui_app_call_data_t *ad = vd->app_data;
99 /* ============ Check valid Evas Object ============= */
101 valid = _vcui_check_valid_eo(priv->contents, "INCOMINGVIEW");
103 CALL_UI_DEBUG("[========== INCOMINGVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
106 /* ============ Check valid Evas Object ============= */
108 if (strcmp((char *)priv->now_data->call_file_path, NOIMG_ICON) == 0) {
109 _vcui_show_wallpaper_image(priv->contents);
110 _vcui_show_calling_name_bg(priv->contents);
112 CALL_UI_DEBUG("there is caller image.");
113 _vcui_show_wallpaper_image(priv->contents);
114 _vcui_show_calling_name_bg(priv->contents);
115 priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, priv->now_data->call_file_path);
118 /* call name (if nothing, call number) */
119 if (strlen((char *)priv->now_data->call_display) == 0) {
120 edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_num);
122 edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_display);
123 edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)priv->now_data->call_num);
126 active_cnt = _vcui_doc_get_count_unhold();
127 hold_cnt = _vcui_doc_get_count_hold();
128 CALL_UI_DEBUG("unhold:[%d], hold:[%d]",active_cnt, hold_cnt );
129 __vcui_view_incoming_clear_button(priv->contents); /* to change 2nd incoming call view -> normal incoming call view. */
130 if (active_cnt == 0) { /* no active call - single mt call or 2nd call(1hold) */
131 CALL_UI_DEBUG("normal incoming call");
133 _vcui_create_button_accept(vd);
134 _vcui_create_button_reject(vd);
136 ad->beffect_needed = EINA_TRUE;
137 } else if (hold_cnt == 0) { /* active call & no hold call - 2nd call(1active) */
138 CALL_UI_DEBUG("2nd incoming call-1");
139 char text[256] = { 0, };
140 _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming3");
141 memset(text, 0x00, 256);
142 snprintf(text, 256, "%s + %s", _("IDS_CALL_BODY_HOLD_ACTIVE_CALL_ABB"), _("IDS_CALL_BUTTON_ACCEPT"));
143 _vcui_create_button_second_incoming_hold_and_accept(vd, text);
144 memset(text, 0x00, 256);
145 snprintf(text, 256, "%s + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), _("IDS_CALL_BUTTON_ACCEPT"));
146 _vcui_create_button_second_incoming_end_and_accept(vd, text);
147 } else if (active_cnt == 1 && hold_cnt == 1) { /* 1active & 1hold */
148 CALL_UI_DEBUG("2nd incoming call - 1ACT & 1HLD");
149 char text[256] = { 0, };
150 _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming1");
152 memset(text, 0x00, 256);
153 snprintf(text, 256, "%s + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), _("IDS_CALL_BUTTON_ACCEPT"));
154 _vcui_create_button_second_incoming_end_active_and_accept(vd, text);
156 memset(text, 0x00, 256);
157 snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_HELD_CALL"), _("IDS_CALL_BUTTON_ACCEPT"));
158 _vcui_create_button_second_incoming_end_hold_and_accept(vd, text);
160 memset(text, 0x00, 256);
161 snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_ALL_CALLS"), _("IDS_CALL_BUTTON_ACCEPT"));
162 _vcui_create_button_second_incoming_end_all_and_accept(vd, text);
163 } else if (active_cnt >= 1 && hold_cnt == 1) { /* 1+active & 1hold */
164 CALL_UI_DEBUG("2nd incoming call - [1+]ACT & 1HLD");
165 char text[256] = { 0, };
166 _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming1");
168 memset(text, 0x00, 256);
169 snprintf(text, 256, "%s(%d) + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), active_cnt, _("IDS_CALL_BUTTON_ACCEPT"));
170 _vcui_create_button_second_incoming_end_active_and_accept(vd, text);
172 memset(text, 0x00, 256);
173 snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_HELD_CALL"), _("IDS_CALL_BUTTON_ACCEPT"));
174 _vcui_create_button_second_incoming_end_hold_and_accept(vd, text);
176 memset(text, 0x00, 256);
177 snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_ALL_CALLS"), _("IDS_CALL_BUTTON_ACCEPT"));
178 _vcui_create_button_second_incoming_end_all_and_accept(vd, text);
179 } else if (active_cnt == 1 && hold_cnt >= 1) { /* 1active & 1+hold */
180 CALL_UI_DEBUG("2nd incoming call - 1ACT & [1+]HLD");
181 char text[256] = { 0, };
182 _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming1");
184 memset(text, 0x00, 256);
185 snprintf(text, 256, "%s + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), _("IDS_CALL_BUTTON_ACCEPT"));
186 _vcui_create_button_second_incoming_end_active_and_accept(vd, text);
188 memset(text, 0x00, 256);
189 snprintf(text, 256, "%s(%d) + %s", _("IDS_CALL_OPT_END_HELD_CALL"), hold_cnt, _("IDS_CALL_BUTTON_ACCEPT"));
190 _vcui_create_button_second_incoming_end_hold_and_accept(vd, text);
192 memset(text, 0x00, 256);
193 snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_ALL_CALLS"), _("IDS_CALL_BUTTON_ACCEPT"));
194 _vcui_create_button_second_incoming_end_all_and_accept(vd, text);
196 CALL_UI_DEBUG("unhold:[%d], hold:[%d]", active_cnt, hold_cnt);
198 evas_object_show(eo);
201 static Evas_Object *__vcui_view_incoming_create_contents(void *data)
203 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
204 Evas_Object *eo = NULL;
207 eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_MTVIEW);
214 static Evas_Object *__vcui_view_incoming_create_layout_main(Evas_Object *parent)
216 if (parent == NULL) {
217 CALL_UI_DEBUG("ERROR");
222 ly = elm_layout_add(parent);
223 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
225 elm_layout_theme_set(ly, "standard", "window", "integration");
226 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
227 elm_win_resize_object_add(parent, ly);
229 edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
230 edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
231 evas_object_show(ly);
236 static int __vcui_view_incoming_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
238 CALL_UI_DEBUG("incoming view create!!");
240 vcui_app_call_data_t *ad = view_data->app_data;
241 incoming_view_priv_t *priv = view_data->priv;
243 if (!view_data->layout) {
245 view_data->layout = __vcui_view_incoming_create_layout_main(ad->win_main);
246 if (view_data->layout == NULL) {
247 CALL_UI_DEBUG("ERROR");
251 priv->contents = __vcui_view_incoming_create_contents(view_data);
252 elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents);
254 evas_object_name_set(priv->contents, "INCOMINGVIEW");
255 CALL_UI_DEBUG("[========== INCOMINGVIEW: priv->contents Addr : [%p] ==========]", priv->contents);
259 __vcui_view_incoming_onshow(view_data);
263 static int __vcui_view_incoming_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
265 CALL_UI_DEBUG("incoming view update");
266 incoming_view_priv_t *priv = view_data->priv;
267 if (priv->bdont_refresh == EINA_TRUE) {
270 priv->bselected_btn = EINA_FALSE;
271 __vcui_view_incoming_onshow(view_data);
275 static int __vcui_view_incoming_onhide(voice_call_view_data_t *view_data)
277 CALL_UI_DEBUG("incoming view hide");
280 incoming_view_priv_t *priv = (incoming_view_priv_t *)view_data->priv;
281 valid = _vcui_check_valid_eo(priv->contents, "INCOMINGVIEW");
284 CALL_UI_DEBUG("[========== INCOMINGVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents);
287 evas_object_hide(view_data->layout);
291 static int __vcui_view_incoming_onshow(voice_call_view_data_t *view_data)
293 CALL_UI_DEBUG("incoming view show");
294 vcui_app_call_data_t *ad = _vcui_get_app_data();
297 incoming_view_priv_t *priv = view_data->priv;
298 priv->now_data = _vcui_doc_get_recent_mt();
299 if (priv->now_data == NULL) {
300 CALL_UI_DEBUG("call data is null");
304 __vcui_view_incoming_draw_screen(priv->contents, view_data);
306 evas_object_hide(view_data->layout);
307 evas_object_show(view_data->layout);
309 _vcui_app_win_set_noti_type(EINA_TRUE);
314 static int __vcui_view_incoming_destroy(voice_call_view_data_t *view_data)
316 CALL_UI_DEBUG("incoming view destroy");
318 vcui_app_call_data_t *ad = _vcui_get_app_data();
320 voice_call_view_data_t *vd = ad->view_st[VIEW_INCOMING_VIEW];
321 incoming_view_priv_t *priv = (incoming_view_priv_t *)vd->priv;
323 if (_vcui_is_idle_lock() == CALL_LOCK)
324 _vcui_app_win_set_noti_type(EINA_TRUE);
326 _vcui_app_win_set_noti_type(EINA_FALSE);
328 ad->bmute_ringtone = EINA_FALSE;
331 if (priv->contents) {
332 evas_object_del(priv->contents);
333 priv->contents = NULL;
340 if (vd->layout != NULL) {
341 evas_object_hide(vd->layout);
342 evas_object_del(vd->layout);
346 ad->view_st[VIEW_INCOMING_VIEW] = NULL;