From 6dc999562ad2cdf9c9e354a3be7173fe6b1dc60c Mon Sep 17 00:00:00 2001 From: Yunjin Lee Date: Tue, 16 Jul 2019 14:45:56 +0900 Subject: [PATCH] Do not handle HW key event when screen is off - Current askuser handles HW key events regardless of screen status so it processes HW key input to wake up screen-offed device as 'deny once' response. Hence modify it to distinguish focused and unfocused status and handle HW key input accordingly. Change-Id: I5b9073c557c19cdb01314783e154e44f5b4775c4 Signed-off-by: Yunjin Lee --- src/notification-daemon/ui/Popupper.cpp | 22 +++++++++++++++++++++- src/notification-daemon/ui/Popupper.h | 5 +++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/notification-daemon/ui/Popupper.cpp b/src/notification-daemon/ui/Popupper.cpp index 6f7c31f..26c97ff 100644 --- a/src/notification-daemon/ui/Popupper.cpp +++ b/src/notification-daemon/ui/Popupper.cpp @@ -126,10 +126,27 @@ void Popupper::denyPressedCb(void *data, Evas_Object *, void *) popupper->buttonAnswer(IAnswerable::Button::DENY); } +Eina_Bool Popupper::checkWakeupCb(void *data, int type, void *event) +{ + Ecore_Event_Key *ev = static_cast(event); + Popupper* popupper = static_cast(data); + if ((!strcmp(getHomeKey().c_str(), ev->key) || !strcmp("XF86Back", ev->key)) && elm_win_focus_get(popupper->m_win)) { + ALOGD("Focused. Pressed key is <" << ev->key << "> type <" << type << ">"); + popupper->m_focused = true; + } else { + popupper->m_focused = false; + } + return EINA_TRUE; +} + Eina_Bool Popupper::hwKeyClickedCb(void *data, int type, void *event) { Ecore_Event_Key *ev = static_cast(event); Popupper* runner = static_cast(data); + if (!runner->m_focused) { + ALOGD("Key input for wake up. Ignore."); + return EINA_TRUE; + } double delay = 0.5; ALOGD("HW button pressed. type <" << type << "> pressed key is <" << ev->key << ">"); if ((!strcmp(getHomeKey().c_str(), ev->key) || !strcmp("XF86Back", ev->key)) && runner->m_elementPtr) { @@ -188,7 +205,8 @@ void Popupper::initialize() elm_win_keygrab_set(m_win, getHomeKey().c_str(), 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); elm_win_keygrab_set(m_win, "XF86Back", 0, 0, 0, ELM_WIN_KEYGRAB_TOPMOST); - ecore_event_handler_add(ECORE_EVENT_KEY_UP, &Popupper::hwKeyClickedCb, this); + m_keyDownHandler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, &Popupper::checkWakeupCb, this); + m_keyUpHandler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, &Popupper::hwKeyClickedCb, this); } void Popupper::show() { @@ -254,6 +272,8 @@ void Popupper::stop() m_shouldRaise = false; elm_win_keygrab_unset(m_win, getHomeKey().c_str(), 0, 0); elm_win_keygrab_unset(m_win, "XF86Back", 0, 0); + ecore_event_handler_del(m_keyDownHandler); + ecore_event_handler_del(m_keyUpHandler); m_elementPtr.reset(nullptr); m_answerablePtr.reset(nullptr); m_responses.clear(); diff --git a/src/notification-daemon/ui/Popupper.h b/src/notification-daemon/ui/Popupper.h index fbce729..c6556b2 100644 --- a/src/notification-daemon/ui/Popupper.h +++ b/src/notification-daemon/ui/Popupper.h @@ -60,6 +60,7 @@ private: static void unfocusedCb(void *data, Evas_Object *, void *); static void allowPressedCb(void *data, Evas_Object *, void *); static void denyPressedCb(void *data, Evas_Object *, void *); + static Eina_Bool checkWakeupCb(void *data, int type, void *event); static Eina_Bool hwKeyClickedCb(void *data, int type, void *event); void buttonAnswer(IAnswerable::Button button); @@ -78,6 +79,10 @@ private: std::string m_pkgId; bool m_shouldRaise = false; + bool m_focused = false; + + Ecore_Event_Handler *m_keyDownHandler = nullptr; + Ecore_Event_Handler *m_keyUpHandler = nullptr; }; } /* namespace Notification */ -- 2.7.4