From f6149c3229529ed2ea1334e6bab6e1df2c86a4ba Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Mon, 1 Nov 2010 20:35:46 -0700 Subject: [PATCH] Fix bugs related to cheek event suppression. Two issues: 1. First, due to an inverted conditional in the input dispatcher, we were reporting touches as long touches and vice-versa to the power manager. 2. Power manager user activity cheek event suppression also suppresses touch events (but not long touch or up events). As a result, if cheek event suppression was enabled, touches would not poke the user activity timer. However due to the above logic inversion, this actually affected long touches. Net result, if cheek suppression was enabled in the power manager and you held your thumb on the screen long enough, the phone would go to sleep! Cheek event suppression is commonly turned on when making a phone call. Interestingly, it does not seem to get turned off afterward... This change fixes the logic inversion and exempts touches from the cheek suppression. The reason we do the latter is because the old behavior was actually harmful in other ways too: a touch down would be suppressed but not a long touch or the touch up. This would cause bizarre behavior if you touched the screen while it was dimmed. Instead of brightening immediately, it would brighten either when you lifted your finger or 300ms later, whichever came first. Bug: 3154895 Change-Id: Ied9ccec6718fbe86506322ff47a4e3eb58f81834 --- libs/ui/InputDispatcher.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ui/InputDispatcher.cpp b/libs/ui/InputDispatcher.cpp index ae81d2615..c0b27fe2c 100644 --- a/libs/ui/InputDispatcher.cpp +++ b/libs/ui/InputDispatcher.cpp @@ -51,8 +51,8 @@ namespace android { -// Delay between reporting long touch events to the power manager. -const nsecs_t EVENT_IGNORE_DURATION = 300 * 1000000LL; // 300 ms +// Delay before reporting long touch events to the power manager. +const nsecs_t LONG_TOUCH_DELAY = 300 * 1000000LL; // 300 ms // Default input dispatching timeout if there is no focused application or paused window // from which to determine an appropriate dispatching timeout. @@ -1416,7 +1416,7 @@ void InputDispatcher::pokeUserActivityLocked(const EventEntry* eventEntry) { eventType = POWER_MANAGER_TOUCH_UP_EVENT; break; default: - if (motionEntry->eventTime - motionEntry->downTime >= EVENT_IGNORE_DURATION) { + if (motionEntry->eventTime - motionEntry->downTime < LONG_TOUCH_DELAY) { eventType = POWER_MANAGER_TOUCH_EVENT; } else { eventType = POWER_MANAGER_LONG_TOUCH_EVENT;