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-elements.h"
20 #include "vcui-view-quickpanel.h"
21 #include <minicontrol-provider.h>
23 #define VIEW_QUICKPANEL_LAYOUT_ID "QUICKPANELVIEW"
25 Evas_Object *caller_id;
27 Ecore_Event_Handler *client_msg_handler;
28 } vcui_view_qp_priv_t;
30 static int __vcui_view_qp_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
31 static int __vcui_view_qp_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
32 static int __vcui_view_qp_onhide(voice_call_view_data_t *view_data);
33 static int __vcui_view_qp_onshow(voice_call_view_data_t *view_data);
34 static int __vcui_view_qp_ondestroy(voice_call_view_data_t *view_data);
35 static void __vcui_view_qp_caller_id_cb(void *data, Evas_Object *obj, void *event_info);
36 static Eina_Bool __vcui_qp_client_message_cb(void *data, int type, void *event);
38 static voice_call_view_data_t s_view = {
39 .type = VIEW_QUICKPANEL_VIEW,
42 .onCreate = __vcui_view_qp_oncreate,
43 .onUpdate = __vcui_view_qp_onupdate,
44 .onHide = __vcui_view_qp_onhide,
45 .onShow = __vcui_view_qp_onshow,
46 .onDestroy = __vcui_view_qp_ondestroy,
50 static Eina_Bool __vcui_qp_client_message_cb(void *data, int type, void *event)
54 Ecore_X_Event_Client_Message *ev = (Ecore_X_Event_Client_Message *) event;
55 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
56 vcui_app_call_data_t *ad = vd->app_data;
57 vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv;
59 CALL_UI_DEBUG("message_type: %d", ev->message_type);
60 if ((ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE)
61 || (ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE)) {
62 new_angle = ev->data.l[0];
63 CALL_UI_DEBUG("ROTATION: %d", new_angle);
64 priv->rotate_angle = new_angle;
65 elm_win_rotation_with_resize_set(ad->win_quickpanel, new_angle);
66 __vcui_view_qp_onshow(vd);
69 return ECORE_CALLBACK_RENEW;
72 static void __vcui_view_qp_caller_id_cb(void *data, Evas_Object *obj, void *event_info)
75 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
76 vcui_app_call_data_t *ad = vd->app_data;
78 elm_win_raise(ad->win_main);
81 voice_call_view_data_t *_vcui_view_qp_new(vcui_app_call_data_t *ad)
84 s_view.priv = calloc(1, sizeof(vcui_view_qp_priv_t));
87 CALL_UI_DEBUG("ERROR!!!!!!!!!!! ");
93 static void __vcui_view_qp_draw_contact_image(Evas_Object *eo, call_data_t *pcall_data)
96 vcui_app_call_data_t *ad = _vcui_get_app_data();
97 voice_call_view_data_t *vd = ad->view_st[VIEW_QUICKPANEL_VIEW];
99 vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv;
101 if (pcall_data == NULL)
104 _vcui_delete_contact_image(eo);
105 char *file_path = _vcui_doc_get_caller_id_file_path(pcall_data);
106 if (strcmp(file_path, NOIMG_ICON) == 0) {
107 priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, QP_NOIMG_ICON);
109 priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, file_path);
113 static void __vcui_view_qp_update_caller(Evas_Object *eo, call_data_t *pcall_data)
117 if (pcall_data == NULL)
120 char *call_number = _vcui_doc_get_call_number(pcall_data);
121 char *call_name = _vcui_doc_get_call_display_name(pcall_data);
122 if (strlen(call_name) == 0) {
123 edje_object_part_text_set(_EDJ(eo), "txt_call_name", call_number);
125 edje_object_part_text_set(_EDJ(eo), "txt_call_name", call_name);
129 static void __vcui_view_qp_draw_screen(Evas_Object *eo, void *data)
132 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
133 vcui_app_call_data_t *ad = vd->app_data;
134 vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv;
135 call_data_t *call_data = NULL;
136 char buf[DEF_BUF_LEN] = {0, };
140 vcall_engine_get_group_count(&grp_count);
141 CALL_UI_DEBUG("No. of groups - %d", grp_count);
143 CALL_UI_DEBUG("multi-party call - show active call");
144 int active_calls = 0;
146 active_calls = _vcui_doc_get_unhold_call_data_count();
147 CALL_UI_DEBUG("active_calls[%d]", active_calls);
148 if (active_calls > 1) {
149 char *temp = _("IDS_QP_BODY_GROUP_CALL_HPD_ABB");
150 call_data = _vcui_doc_get_first_call_data_by_unhold_status();
151 snprintf(buf, DEF_BUF_LEN, temp, active_calls);
152 edje_object_part_text_set(_EDJ(eo), "txt_call_name", buf);
153 priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, QP_CONF_ICON);
154 } else if (active_calls == 1) {
155 call_data = _vcui_doc_get_first_call_data_by_unhold_status();
156 __vcui_view_qp_update_caller(eo, call_data);
157 __vcui_view_qp_draw_contact_image(eo, call_data);
159 CALL_UI_DEBUG("invalid case");
161 _vcui_create_quickpanel_mute_button(vd);
162 _vcui_create_quickpanel_end_button(vd);
163 } else if (grp_count == 1) {
164 CALL_UI_DEBUG("single-party call");
167 all_calls = _vcui_doc_get_all_call_data_count();
168 CALL_UI_DEBUG("all_calls[%d]", all_calls);
171 char *temp = _("IDS_QP_BODY_GROUP_CALL_HPD_ABB");
172 call_data = _vcui_doc_get_first_call_data_from_list();
173 snprintf(buf, DEF_BUF_LEN, temp, all_calls);
174 edje_object_part_text_set(_EDJ(eo), "txt_call_name", buf);
175 priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, QP_CONF_ICON);
176 } else if (all_calls == 1) {
177 call_data = _vcui_doc_get_first_call_data_from_list();
178 __vcui_view_qp_update_caller(eo, call_data);
179 __vcui_view_qp_draw_contact_image(eo, call_data);
181 CALL_UI_DEBUG("invalid case");
184 int caller_status = _vcui_doc_get_call_status(call_data);
185 if (caller_status == CALL_HOLD) {
186 CALL_UI_DEBUG("Hold call status");
187 _vcui_create_quickpanel_unhold_button(vd);
189 _vcui_create_quickpanel_mute_button(vd);
193 CALL_UI_DEBUG("dialing/connecting view");
194 call_data = _vcui_doc_get_call_data_mo_type();
195 __vcui_view_qp_update_caller(eo, call_data);
196 __vcui_view_qp_draw_contact_image(eo, call_data);
198 _vcui_create_quickpanel_end_button(vd);
200 evas_object_smart_callback_add(priv->caller_id, "clicked", __vcui_view_qp_caller_id_cb, vd);
202 if (!_vcui_doc_get_no_status_call_data_count()) {
203 CALL_UI_DEBUG("no calls with NO_STATUS - update the timer");
204 if (call_data != NULL)
205 _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data));
207 _vcui_view_qp_update_text_status(vd, _("IDS_CALL_POP_CALLING"));
211 static Evas_Object *__vcui_view_qp_create_window(void)
214 double scale = elm_config_scale_get();
216 win = minicontrol_win_add("voicecall-quickpanel");
217 evas_object_resize(win, QUICKPANEL_WIDTH * scale, QUICKPANEL_HEIGHT * scale);
222 static Evas_Object *__vcui_view_qp_create_layout_main(Evas_Object *parent)
224 if (parent == NULL) {
225 CALL_UI_DEBUG("ERROR");
230 ly = elm_layout_add(parent);
231 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
233 elm_layout_theme_set(ly, "standard", "window", "integration");
234 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
235 elm_win_resize_object_add(parent, ly);
237 edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
238 edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
243 static Evas_Object *__vcui_view_qp_create_contents(void *data, char *group)
246 CALL_UI_DEBUG("ERROR");
249 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
250 vcui_app_call_data_t *ad = vd->app_data;
251 Evas_Object *eo = NULL;
254 eo = _vcui_load_edj(ad->win_quickpanel, EDJ_NAME, group);
262 static int __vcui_view_qp_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
264 CALL_UI_DEBUG("quickpanel view create!!");
266 voice_call_view_data_t *vd = view_data;
267 vcui_app_call_data_t *ad = vd->app_data;
268 vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv;
271 ad->win_quickpanel = __vcui_view_qp_create_window();
272 if (ad->win_quickpanel == NULL) {
273 CALL_UI_DEBUG("ERROR");
276 priv->rotate_angle = elm_win_rotation_get(ad->win_quickpanel);
277 CALL_UI_DEBUG("current rotate angle(%d)", priv->rotate_angle);
279 vd->layout = __vcui_view_qp_create_layout_main(ad->win_quickpanel);
280 if (vd->layout == NULL) {
281 CALL_UI_DEBUG("ERROR");
286 if (priv->client_msg_handler == NULL)
287 priv->client_msg_handler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, __vcui_qp_client_message_cb, vd);
289 __vcui_view_qp_onshow(view_data);
293 static int __vcui_view_qp_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
295 CALL_UI_DEBUG("quickpanel view update!!");
297 __vcui_view_qp_onshow(view_data);
301 static int __vcui_view_qp_onhide(voice_call_view_data_t *view_data)
303 CALL_UI_DEBUG("quickpanel view hide!!");
305 evas_object_hide(view_data->layout);
309 static int __vcui_view_qp_onshow(voice_call_view_data_t *view_data)
311 CALL_UI_DEBUG("quickpanel view show!!");
312 vcui_app_call_data_t *ad = view_data->app_data;
313 vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)view_data->priv;
315 if (ad->quickpanel_layout) {
316 evas_object_del(ad->quickpanel_layout);
317 ad->quickpanel_layout = NULL;
320 if (priv->rotate_angle == 0 || priv->rotate_angle == 180) {
321 CALL_UI_DEBUG("portrait mode layout");
322 evas_object_resize(ad->win_quickpanel, QUICKPANEL_WIDTH * ad->scale_factor, QUICKPANEL_HEIGHT * ad->scale_factor);
323 ad->quickpanel_layout = __vcui_view_qp_create_contents(view_data, GRP_QUICKPANEL);
324 } else if (priv->rotate_angle == 90 || priv->rotate_angle == 270) {
325 CALL_UI_DEBUG("landscape mode layout");
326 evas_object_resize(ad->win_quickpanel, LSCAPE_QUICKPANEL_WIDTH * ad->scale_factor, QUICKPANEL_HEIGHT * ad->scale_factor);
327 ad->quickpanel_layout = __vcui_view_qp_create_contents(view_data, GRP_QUICKPANEL_LSCAPE);
330 elm_object_part_content_set(view_data->layout, "elm.swallow.content", ad->quickpanel_layout);
331 evas_object_name_set(ad->quickpanel_layout, VIEW_QUICKPANEL_LAYOUT_ID);
332 CALL_UI_DEBUG("[========== QUICKPANEL:ad->quickpanel_layout Addr : [%p] ==========]", ad->quickpanel_layout);
334 __vcui_view_qp_draw_screen(ad->quickpanel_layout, view_data);
339 static int __vcui_view_qp_ondestroy(voice_call_view_data_t *view_data)
341 CALL_UI_DEBUG("quickpanel view destroy!!");
343 vcui_app_call_data_t *ad = _vcui_get_app_data();
344 voice_call_view_data_t *vd = ad->view_st[VIEW_QUICKPANEL_VIEW];
346 vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv;
349 if (priv->caller_id) {
350 evas_object_del(priv->caller_id);
351 priv->caller_id = NULL;
354 if (priv->client_msg_handler != NULL)
355 ecore_event_handler_del(priv->client_msg_handler);
361 if (ad->quickpanel_layout) {
362 evas_object_del(ad->quickpanel_layout);
363 ad->quickpanel_layout = NULL;
366 if (vd->layout != NULL) {
367 evas_object_hide(vd->layout);
368 evas_object_del(vd->layout);
372 ad->view_st[VIEW_QUICKPANEL_VIEW] = NULL;
374 if (ad->win_quickpanel) {
375 evas_object_del(ad->win_quickpanel);
376 ad->win_quickpanel = NULL;
383 void _vcui_view_qp_update_text_status(voice_call_view_data_t *vd, char *txt_status)
386 vcui_app_call_data_t *ad = NULL;
390 CALL_UI_DEBUG("View Data is NULL");
395 if (ad->win_quickpanel && ad->quickpanel_layout) {
396 valid = _vcui_check_valid_eo(ad->quickpanel_layout, VIEW_QUICKPANEL_LAYOUT_ID);
398 CALL_UI_DEBUG("[========== QUICKPANELVIEW : Invalid Evas Object, ad->quickpanel_layout : %p ==========]", ad->quickpanel_layout);
401 edje_object_part_text_set(_EDJ(ad->quickpanel_layout), "txt_timer", txt_status);
406 void _vc_ui_view_qp_set_call_timer(Evas_Object *qp_layout, char *pcall_timer)
410 VCUI_RETURN_IF_FAIL(qp_layout);
411 valid = _vcui_check_valid_eo(qp_layout, VIEW_QUICKPANEL_LAYOUT_ID);
413 CALL_UI_DEBUG("[========== QUICKPANELVIEW : Invalid Evas Object, ad->quickpanel_layout : %p ==========]", qp_layout);
416 if (!_vcui_doc_get_no_status_call_data_count())
417 edje_object_part_text_set(_EDJ(qp_layout), "txt_timer", _(pcall_timer));
420 void _vcui_view_qp_install_window(voice_call_view_data_t *vd)
424 vcui_app_call_data_t *ad = NULL;
427 CALL_UI_DEBUG("View Data is NULL");
433 CALL_UI_DEBUG("app Data is NULL");
437 win = ad->win_quickpanel;
438 if (ad->win_quickpanel == NULL) {
439 CALL_UI_DEBUG("QP win is NULL");
442 evas_object_show(win);
443 evas_object_show(vd->layout);
446 void _vcui_view_qp_uninstall_window(voice_call_view_data_t *vd)
450 vcui_app_call_data_t *ad = NULL;
453 CALL_UI_DEBUG("View Data is NULL");
459 CALL_UI_DEBUG("app Data is NULL");
463 win = ad->win_quickpanel;
464 if (ad->win_quickpanel == NULL) {
465 CALL_UI_DEBUG("QP win is NULL");
468 elm_win_quickpanel_set(win, 0);
470 evas_object_hide(ad->win_quickpanel);
471 evas_object_hide(vd->layout);