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
This commit is contained in:
Jeff Brown 2010-11-01 20:35:46 -07:00
parent 6a91efdb87
commit f6149c3229

View File

@ -51,8 +51,8 @@
namespace android { namespace android {
// Delay between reporting long touch events to the power manager. // Delay before reporting long touch events to the power manager.
const nsecs_t EVENT_IGNORE_DURATION = 300 * 1000000LL; // 300 ms const nsecs_t LONG_TOUCH_DELAY = 300 * 1000000LL; // 300 ms
// Default input dispatching timeout if there is no focused application or paused window // Default input dispatching timeout if there is no focused application or paused window
// from which to determine an appropriate dispatching timeout. // from which to determine an appropriate dispatching timeout.
@ -1416,7 +1416,7 @@ void InputDispatcher::pokeUserActivityLocked(const EventEntry* eventEntry) {
eventType = POWER_MANAGER_TOUCH_UP_EVENT; eventType = POWER_MANAGER_TOUCH_UP_EVENT;
break; break;
default: default:
if (motionEntry->eventTime - motionEntry->downTime >= EVENT_IGNORE_DURATION) { if (motionEntry->eventTime - motionEntry->downTime < LONG_TOUCH_DELAY) {
eventType = POWER_MANAGER_TOUCH_EVENT; eventType = POWER_MANAGER_TOUCH_EVENT;
} else { } else {
eventType = POWER_MANAGER_LONG_TOUCH_EVENT; eventType = POWER_MANAGER_LONG_TOUCH_EVENT;