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-app-window.h"
20 static void __vcui_app_win_focus_in_cb(void *data, Evas_Object *obj, void *event_info);
21 static void __vcui_app_win_focus_out_cb(void *data, Evas_Object *obj, void *event_info);
22 static void __vcui_app_win_main_win_del_cb(void *data, Evas_Object *obj, void *event);
23 static Eina_Bool __vcui_app_win_hard_key_down_cb(void *data, int type, void *event);
24 static Eina_Bool __vcui_app_win_hard_key_up_cb(void *data, int type, void *event);
25 static Eina_Bool __vcui_app_win_mouse_down_cb(void *data, int type, void *event);
26 static Eina_Bool __vcui_app_win_longpress_mute_timer_cb(void *data);
27 static Eina_Bool __vcui_app_win_volup_key_longpress_timer_cb(void *data);
28 static Eina_Bool __vcui_app_win_voldown_key_longpress_timer_cb(void *data);
30 Evas_Object *_vcui_app_win_create_main(vcui_app_call_data_t *ad, const char *name)
34 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
36 elm_win_title_set(eo, name);
37 elm_win_borderless_set(eo, EINA_TRUE);
38 evas_object_smart_callback_add(eo, "delete,request", __vcui_app_win_main_win_del_cb, NULL);
39 ecore_x_window_size_get(ecore_x_window_root_first_get(), &ad->root_w, &ad->root_h);
40 evas_object_resize(eo, ad->root_w, ad->root_h);
41 elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW);
42 evas_object_smart_callback_add(eo, "focus-in", __vcui_app_win_focus_in_cb, ad);
43 evas_object_smart_callback_add(eo, "focus-out", __vcui_app_win_focus_out_cb, ad);
49 static void __vcui_app_win_focus_in_cb(void *data, Evas_Object *obj, void *event_info)
54 static void __vcui_app_win_focus_out_cb(void *data, Evas_Object *obj, void *event_info)
59 static void __vcui_app_win_main_win_del_cb(void *data, Evas_Object *obj, void *event)
65 static Eina_Bool __vcui_app_win_hard_key_down_cb(void *data, int type, void *event)
69 vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data;
70 Ecore_Event_Key *ev = event;
72 retvm_if(ev == NULL, 0, "ERROR!!! ========= Event is NULL!!!");
74 if (ad->view_top == -1) {
75 CALL_UI_DEBUG("ad->view_top is -1.");
76 #ifndef END_KEY_PROCESSING
77 if ((ad->contact_ug != NULL) && (!strcmp(ev->keyname, KEY_END))) {
78 CALL_UI_DEBUG("send end key to contact ug.");
79 ug_send_key_event(UG_KEY_EVENT_END);
85 if (!strcmp(ev->keyname, KEY_VOLUMEUP)) {
86 CALL_UI_DEBUG("[KEY]KEY_VOLUMEUP pressed");
87 if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW) || (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) {
88 _vcui_engine_interface_process_mute_alert();
89 ad->bmute_ringtone = EINA_TRUE;
91 ad->vol_longpress_cnt = 0;
92 if (_voicecall_dvc_get_proximity_sensor_state() != VCALL_SENSOR_NEAR)
93 _voicecall_dvc_control_lcd_state(VC_LCD_ON);
94 _vcui_set_volume(VAL_VOL_UP);
95 ad->volup_key_longpress_timer = ecore_timer_add(VOLUME_KEY_LONG_PRESS_TIMEOUT, __vcui_app_win_volup_key_longpress_timer_cb, ad);
97 } else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) {
98 CALL_UI_DEBUG("[KEY]KEY_VOLUMEDOWN pressed");
99 if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW) || (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) {
100 _vcui_engine_interface_process_mute_alert();
101 ad->bmute_ringtone = EINA_TRUE;
103 ad->vol_longpress_cnt = 0;
104 if (_voicecall_dvc_get_proximity_sensor_state() != VCALL_SENSOR_NEAR)
105 _voicecall_dvc_control_lcd_state(VC_LCD_ON);
106 _vcui_set_volume(VAL_VOL_DOWN);
107 ad->voldown_key_longpress_timer = ecore_timer_add(VOLUME_KEY_LONG_PRESS_TIMEOUT, __vcui_app_win_voldown_key_longpress_timer_cb, ad);
111 CALL_UI_DEBUG("End..");
115 static Eina_Bool __vcui_app_win_hard_key_up_cb(void *data, int type, void *event)
119 vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data;
120 Ecore_Event_Key *ev = event;
122 retvm_if(ev == NULL, 0, "ERROR!!! ========= Event is NULL!!!");
124 if (0 == strcmp(ev->keyname, KEY_VOLUMEDOWN)) {
125 if (ad->ringtone_longpress_mute_timer) {
126 ecore_timer_del(ad->ringtone_longpress_mute_timer);
127 ad->ringtone_longpress_mute_timer = NULL;
131 ad->vol_longpress_cnt = 0;
133 if (ad->volup_key_longpress_timer) {
134 ecore_timer_del(ad->volup_key_longpress_timer);
135 ad->volup_key_longpress_timer = NULL;
138 if (ad->voldown_key_longpress_timer) {
139 ecore_timer_del(ad->voldown_key_longpress_timer);
140 ad->voldown_key_longpress_timer = NULL;
146 static Eina_Bool __vcui_app_win_mouse_down_cb(void *data, int type, void *event)
148 /*CALL_UI_DEBUG("..");*/
150 vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data;
151 Ecore_Event_Mouse_Button *ev = event;
158 void _vcui_app_win_key_grab(vcui_app_call_data_t *ad)
161 CALL_UI_KPI("_vcui_app_win_key_grab start");
164 ad->disp = ecore_x_display_get();
165 ad->win = elm_win_xwindow_get(ad->win_main);
167 result = utilx_grab_key(ad->disp, ad->win, KEY_VOLUMEUP, EXCLUSIVE_GRAB);
169 CALL_UI_DEBUG("KEY_VOLUMEUP key grab failed");
171 result = utilx_grab_key(ad->disp, ad->win, KEY_VOLUMEDOWN, EXCLUSIVE_GRAB);
173 CALL_UI_DEBUG("KEY_VOLUMEDOWN key grab failed");
175 if (ad->downkey_handler == NULL)
176 ad->downkey_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __vcui_app_win_hard_key_down_cb, ad);
177 if (ad->upkey_handler == NULL)
178 ad->upkey_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __vcui_app_win_hard_key_up_cb, ad); /* (for long press)*/
179 if (ad->mouse_evnt_handler == NULL)
180 ad->mouse_evnt_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, __vcui_app_win_mouse_down_cb, ad); /*for ctxpopup*/
182 CALL_UI_KPI("_vcui_app_win_key_grab done");
185 static Eina_Bool __vcui_app_win_longpress_mute_timer_cb(void *data)
189 vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data;
190 call_data_t *call_data = _vcui_doc_get_recent_mt();
192 if (call_data == NULL)
193 return ECORE_CALLBACK_CANCEL;
195 if (ad->ringtone_longpress_mute_timer) {
196 ecore_timer_del(ad->ringtone_longpress_mute_timer);
197 ad->ringtone_longpress_mute_timer = NULL;
200 ad->vol_longpress_cnt = 0;
202 if (ad->volup_key_longpress_timer) {
203 ecore_timer_del(ad->volup_key_longpress_timer);
204 ad->volup_key_longpress_timer = NULL;
207 if (ad->voldown_key_longpress_timer) {
208 ecore_timer_del(ad->voldown_key_longpress_timer);
209 ad->voldown_key_longpress_timer = NULL;
212 _vcui_view_popup_unload(ad->vol_ringtone_popup_eo);
214 _vcui_engine_interface_process_mute_alert();
215 ad->bmute_ringtone = EINA_TRUE;
217 return ECORE_CALLBACK_CANCEL;
220 static Eina_Bool __vcui_app_win_volup_key_longpress_timer_cb(void *data)
224 vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data;
226 if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW || ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) {
227 if((ad->ringtone_val == RINGTONE_MAX) || (ad->bmute_ringtone == EINA_TRUE)){
228 if (ad->volup_key_longpress_timer) {
229 ecore_timer_del(ad->volup_key_longpress_timer);
230 ad->volup_key_longpress_timer = NULL;
232 return ECORE_CALLBACK_CANCEL;
234 } else if (ad->headset_status == EINA_TRUE) {
235 if(ad->bt_vol_val== BT_VOL_MAX) {
236 if (ad->volup_key_longpress_timer) {
237 ecore_timer_del(ad->volup_key_longpress_timer);
238 ad->volup_key_longpress_timer = NULL;
240 return ECORE_CALLBACK_CANCEL;
243 if(ad->voice_vol_val == VOICE_VOL_MAX) {
244 if (ad->volup_key_longpress_timer) {
245 ecore_timer_del(ad->volup_key_longpress_timer);
246 ad->volup_key_longpress_timer = NULL;
248 return ECORE_CALLBACK_CANCEL;
252 ad->vol_longpress_cnt++;
254 if ((ad->vol_longpress_cnt % 3) == 0) {
255 _vcui_set_volume(VAL_VOL_UP);
258 return ECORE_CALLBACK_RENEW;
261 static Eina_Bool __vcui_app_win_voldown_key_longpress_timer_cb(void *data)
265 vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data;
267 if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW || ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) {
268 if((ad->ringtone_val == RINGTONE_MAX) || (ad->bmute_ringtone == EINA_TRUE)) {
269 if (ad->voldown_key_longpress_timer) {
270 ecore_timer_del(ad->voldown_key_longpress_timer);
271 ad->voldown_key_longpress_timer = NULL;
273 return ECORE_CALLBACK_CANCEL;
275 } else if (ad->headset_status == EINA_TRUE) {
276 if(ad->bt_vol_val == BT_VOL_MIN) {
277 if (ad->voldown_key_longpress_timer) {
278 ecore_timer_del(ad->voldown_key_longpress_timer);
279 ad->voldown_key_longpress_timer = NULL;
281 return ECORE_CALLBACK_CANCEL;
284 if(ad->voice_vol_val == VOICE_VOL_MIN) {
285 if (ad->voldown_key_longpress_timer) {
286 ecore_timer_del(ad->voldown_key_longpress_timer);
287 ad->voldown_key_longpress_timer = NULL;
289 return ECORE_CALLBACK_CANCEL;
293 ad->vol_longpress_cnt++;
295 if((ad->vol_longpress_cnt % 3) == 0) {
296 _vcui_set_volume(VAL_VOL_DOWN);
299 return ECORE_CALLBACK_RENEW;
302 void _vcui_app_win_set_noti_type(int bwin_noti)
305 vcui_app_call_data_t *ad = _vcui_get_app_data();
308 xwin = elm_win_xwindow_get(ad->win_main);
310 if (bwin_noti == EINA_FALSE) {
311 CALL_UI_DEBUG("window type: NORMAL");
312 /* Set Normal window */
313 ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NORMAL);
315 CALL_UI_DEBUG("window type: NOTI-HIGH");
316 /* Set Notification window */
317 ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
318 /* Set Notification's priority to LEVEL_HIGH */
319 utilx_set_system_notification_level(ecore_x_display_get(), xwin, UTILX_NOTIFICATION_LEVEL_HIGH);