#define CALLUI_KEY_VOLUMEUP "XF86AudioRaiseVolume"
#define CALLUI_KEY_VOLUMEDOWN "XF86AudioLowerVolume"
-#define CALLUI_EARSET_KEY_LONG_PRESS_TIMEOUT_SEC 1.0
+#define CALLUI_MEDIA_KEY_LONG_PRESS_TIMEOUT_SEC 1.0
#define CALLUI_APP_STATE_TIMEOUT_SEC 0.3
#define CALLUI_POWERKEY_PRESS_TIME_LIMIT_SEC 0.1
static void __unset_main_win_key_grab(callui_app_data_t *ad);
static void __process_power_key_up(callui_app_data_t *ad);
static void __process_home_key_up(callui_app_data_t *ad);
+static void __process_media_key_up(callui_app_data_t *ad);
static void __init_signals_handling();
static void __app_signal_handler(int signum, siginfo_t *info, void *context);
__unset_main_win_key_grab(ad);
DELETE_ECORE_TIMER(ad->app_state_check_timer);
+ DELETE_ECORE_TIMER(ad->media_key_longpress_timer);
if (ad->delayed_app_control) {
app_control_destroy(ad->delayed_app_control);
debug_leave();
}
+static void __process_media_key_up(callui_app_data_t *ad)
+{
+ debug_enter();
+
+ DELETE_ECORE_TIMER(ad->media_key_longpress_timer);
+
+ const callui_call_data_t *incom = _callui_stp_get_call_data(ad->state_provider, CALLUI_CALL_DATA_INCOMING);
+ const callui_call_data_t *active = _callui_stp_get_call_data(ad->state_provider, CALLUI_CALL_DATA_ACTIVE);
+ const callui_call_data_t *held = _callui_stp_get_call_data(ad->state_provider, CALLUI_CALL_DATA_HELD);
+
+ if (incom) {
+ if (ad->is_media_key_longpressed) {
+ _callui_manager_reject_call(ad->call_manager);
+ } else {
+ if (active) {
+ _callui_manager_answer_call(ad->call_manager, CALLUI_CALL_ANSWER_HOLD_ACTIVE_AND_ACCEPT);
+ } else {
+ _callui_manager_answer_call(ad->call_manager, CALLUI_CALL_ANSWER_NORMAL);
+ }
+ }
+ } else if (held && active) {
+ _callui_manager_end_call(ad->call_manager, 0, CALLUI_CALL_RELEASE_ALL_ACTIVE);
+ } else if (held) {
+ if (ad->is_media_key_longpressed) {
+ _callui_manager_unhold_call(ad->call_manager);
+ } else {
+ _callui_manager_end_call(ad->call_manager, 0, CALLUI_CALL_RELEASE_ALL);
+ }
+ } else if (active) {
+ if (ad->is_media_key_longpressed) {
+ _callui_manager_hold_call(ad->call_manager);
+ } else {
+ _callui_manager_end_call(ad->call_manager, 0, CALLUI_CALL_RELEASE_ALL);
+ }
+ }
+ ad->is_media_key_longpressed = false;
+}
+
static void __process_home_key_up(callui_app_data_t *ad)
{
debug_enter();
} else if (!strcmp(ev->keyname, CALLUI_KEY_HOME)) {
dbg("KEY_HOME");
__process_home_key_up(ad);
+ } else if (!strcmp(ev->keyname, CALLUI_KEY_MEDIA)) {
+ dbg("KEY_MEDIA");
+ __process_media_key_up(ad);
} else if (!strcmp(ev->keyname, CALLUI_KEY_BACK)) {
if (_callui_vm_get_cur_view_type(ad->view_manager) == CALLUI_VIEW_ENDCALL) {
_callui_common_exit_app();
return ECORE_CALLBACK_DONE;
}
+static Eina_Bool __media_key_longpress_timer_cb(void *data)
+{
+ debug_enter();
+
+ callui_app_data_t *ad = data;
+
+ ad->is_media_key_longpressed = true;
+ ad->media_key_longpress_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
static Eina_Bool __hard_key_down_cb(void *data, int type, void *event)
{
debug_enter();
if (!strcmp(ev->keyname, CALLUI_KEY_MEDIA)) {
dbg("KEY MEDIA");
+ ad->is_media_key_longpressed = false;
+ DELETE_ECORE_TIMER(ad->media_key_longpress_timer);
+ ad->media_key_longpress_timer =
+ ecore_timer_add(CALLUI_MEDIA_KEY_LONG_PRESS_TIMEOUT_SEC, __media_key_longpress_timer_cb, ad);
} else if (!strcmp(ev->keyname, CALLUI_KEY_HOME)) {
dbg("KEY HOME");
} else if (!strcmp(ev->keyname, CALLUI_KEY_POWER)) {