Add timer for home key event handling 24/181324/8
authorYunjin Lee <yunjin-.lee@samsung.com>
Tue, 12 Jun 2018 02:39:14 +0000 (11:39 +0900)
committerTomasz Swierczek <t.swierczek@samsung.com>
Tue, 28 Aug 2018 04:54:20 +0000 (04:54 +0000)
- According to the UX guide, the target should show its homescreen
when home key event occurs. It means that, when the event comes,
the caller application should be getting lower and pasued with askuser
popup close. For that reason, askuser shares home key events with
other processes.

And the problem is, some application takes much longer time than askuser
for making themslves invisible. In this situation, user can't avoid
seeing some other layers of the caller app before seeing target
homescreen and it harms UX.

So, added 0.5s of timer for home key event handling.
Maybe there can be a much slower one and 0.5s can be not enough for them
but for now 0.5s seems proper when testing on the target with preloaded applications.

Change-Id: Ibb3b09c7e34acb5ec26c7bfdfbfb11d7862a6da2
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
src/notification-daemon/ui/Popupper.cpp

index 6c8d4ca..cf182a3 100644 (file)
@@ -110,10 +110,19 @@ Eina_Bool Popupper::hwKeyClickedCb(void *data, int type, void *event)
 {
     Ecore_Event_Key *ev = static_cast<Ecore_Event_Key*>(event);
     Popupper* runner = static_cast<Popupper*>(data);
+    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) {
         ALOGD("Respond as deny once.");
-        runner->m_popupResponseHandler(NResponseType::None);
+        if (!strcmp("XF86Back", ev->key))
+            delay = 0;
+        ecore_timer_add(delay,
+            [](void *data) -> Eina_Bool {
+                Popupper *runner = static_cast<Popupper *>(data);
+                runner->m_popupResponseHandler(NResponseType::None);
+                return ECORE_CALLBACK_CANCEL;
+            },
+            runner);
     }
     return EINA_TRUE;
 }