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
Avoid resetting the debounce timer for automatic brightness if a new light event
is received that agrees with the direction of change of the previous event(s).
Change-Id: Id4d71f6db46ded46b24eb44cb8de9b2cfedb3f06
Signed-off-by: Mike Lockwood <lockwood@google.com>
These are the logs from when I just reproduced it here. This means that we got an event after the
screen turned off. So isScreenTurningOffLocked() is working, but we need to also check that we're
not off. This bug is happening because lightSensorChangedLocked is calling
mButtonLight.setBrightness() directly instead of going through updateLightsLocked, which is where
I added that check to not turn the buttons on of the screen is off.
D/PowerManagerService( 1243): onSensorChanged: light value: 1280
I/power ( 1243): *** set_screen_state 0
D/PowerManagerService( 1243): enableLightSensor false
D/PowerManagerService( 1243): onSensorChanged: light value: 320
D/PowerManagerService( 1243): lightSensorChangedLocked 320
D/PowerManagerService( 1243): lcdValue 55
D/PowerManagerService( 1243): buttonValue 255
D/PowerManagerService( 1243): keyboardValue 0
D/SurfaceFlinger( 1243): About to give-up screen, flinger = 0x8dcf! 0
Bug: 3117801
Change-Id: I722d66cafba71b183cc987b7383d4ad7e171ba82
Merge commit 'b34fe2f0258eb1ed512b682206b7fe65116f1dbd'
* commit 'b34fe2f0258eb1ed512b682206b7fe65116f1dbd':
Make sure that when the screen is off, we don't try to turn the buttons on too.
Merge commit '5747eebf6eb5ea91480dc576c45c752685383e37'
* commit '5747eebf6eb5ea91480dc576c45c752685383e37':
Pressing the power button quickly needs to turn the screen on and off correctly.
This does the animation with the power manager lock held, which isn't great, but is safe.
Bug: 3102208
Change-Id: Ib0af3fab1cf6ba47053c10ae8b701376d63802ff
- Pass to surface flinger whether we want animations or not.
- Don't use the animation when the screen goes off because of the prox sensor.
- Turn the screen-on animation back off
- Also, now the animation setting controls whether or not we do the animation.
Bug: 3097475
Bug: 3098508
Change-Id: I205d5564d6668b33a8dc1c40d8cc06c4aad305cf
Merge commit '9a12a3c8d4bb20042cf69e07d268e3a04ac71f96'
* commit '9a12a3c8d4bb20042cf69e07d268e3a04ac71f96':
Remove dead code, and make the animation a setting.
turn off the electron beam
Merge commit '14854820eac895a925791fb41ccd330447fd4f02'
* commit '14854820eac895a925791fb41ccd330447fd4f02':
Add a configuration option to turn on the screen when you unplug the device.
Merge commit '5be893a71aa72f54660496dd01cfad66adb86b8f'
* commit '5be893a71aa72f54660496dd01cfad66adb86b8f':
Don't throw when userActivity fails because of the permission check.
... to make sure that if you press the power button to turn off the
screen, that the prox sensor won't turn it back on.
Bug: 3011618
Change-Id: Id16c1d65417539d4592f485b1c3efb737540c3cd
We were flunking the enforcement of DEVICE_POWER since apps don't need that permission to use a wake
lock.
Bug: 3051596
Change-Id: I1910d8402adb3e9a4d8635de5d2a301f6286f216
Merge commit '198297b495d975cd4889f5136cd69368bd319eed'
* commit '198297b495d975cd4889f5136cd69368bd319eed':
Revert "Revert "Check for the DEVICE_POWER permission in userActivity.""
Merge commit '05e110506156a1b782232833b907afb428802b69'
* commit '05e110506156a1b782232833b907afb428802b69':
Revert "Check for the DEVICE_POWER permission in userActivity."
Merge commit 'f5bdeba197aba659e2dd3849a5bdfba8826c036d'
* commit 'f5bdeba197aba659e2dd3849a5bdfba8826c036d':
Check for the DEVICE_POWER permission in userActivity.
Merge commit 'abdd2c7f03651e95424133c2be948238c6dc7bf6'
* commit 'abdd2c7f03651e95424133c2be948238c6dc7bf6':
Fix NPE in PowerManagerService on boot, if some settings are corrupted.
Merge commit '227afd3a1b1a32891e5e20c79fd98b2ccf982426'
* commit '227afd3a1b1a32891e5e20c79fd98b2ccf982426':
Fix problem where power manager was calling battery stats with bad wl type.
This fixes a problem where applications could ask the location
manager to do very heavy-weight things (like... say... update
location every minute), which would get accounted against the
system instead of the application because ultimately it is the
system making the heavy calls (wake locks, etc).
To solve this, we introduce a new class WorkSource representing
the source of some work. Wake locks and Wifi locks allow you
to set the source to use (but only if you are system code and thus
can get the permission to do so), which is what will be reported
to the battery stats until the actual caller.
For the initial implementation, the location manager keeps track
of all clients requesting periodic updates, and tells its providers
about them as a WorkSource param when setting their min update time.
The network location provider uses this to set the source on the
wake and wifi locks it acquires, when doing work because of the
update period.
This should also be used elsewhere, such as in the GPS provider,
but this is a good start.
Change-Id: I2b6ffafad9e90ecf15d7c502e2db675fd52ae3cf
This change adds a second timeout to the SecuritySettings page
separate from the standard display timeout.
Change-Id: I41fe10e31688308f52695ad3ee30a4b0507112bd
Merge commit '797e688b3bebbf1f50a8ad08528740b064f79153' into gingerbread
* commit '797e688b3bebbf1f50a8ad08528740b064f79153':
Continue trying to make the turn off quickly after call feature work.
The previous implementation worked if the set timeout is short enough, which mine was. This one
carries the remaining amount of timeout override forward through all of the countdown steps.
Bug: 2844990
Change-Id: I040df22f9f9ddf98c355ac6845b7624e95f84f33
- Now track wake locks in battery history.
- Now track sensors in battery history.
- Some filtering of sensory data.
- Fixes to some data that wasn't cleared when resetting battery stats.
- Print amount discharged since last charge.
And the big part -- keep track of wake locks held per process,
and kill processes that hold wake locks too much while they are in
the background. This includes information in the battery stats
about the process being killed, which will be available to the
developer if the app is reported.
Change-Id: I97202e94d00aafe0526ba2db74a03212e7539c54
Merge commit '8c65ee2d509db7dcb50ce4530d52eb5bdca3f917' into gingerbread
* commit '8c65ee2d509db7dcb50ce4530d52eb5bdca3f917':
Add a method to let a properly permissioned app directly
manipulate the user activity timeout. We should come up
with a better API for this, but this is for a last minute
power manager hack to turn off the screen sooner after a
phone call ends.
Change-Id: I76422f952e3e894c90b3311e7d889899c79cbbaa
Removed old input dispatch code.
Refactored the policy callbacks.
Pushed a tiny bit of the power manager state down to native.
Fixed long press on MENU.
Made the virtual key detection and cancelation a bit more precise.
Change-Id: I5d8c1062f7ea0ab3b54c6fadb058c4d5f5a9e02e
In lightSensorChangedLocked we ignore the light sensor if the battery is low.
But in applyButtonState() and applyKeyboardState() we were still using the previous
mLightSensorScreenBrightness value, which resulted in a race condition that could
leave the button lights on after the screen turns off.
Now we ignore the light sensor value and button brightness override if the battery
is low so the low battery behavior is consistent.
Change-Id: I4943f8904299883211a95596ee207df69d1eaea2
BUG: 2570962
Signed-off-by: Mike Lockwood <lockwood@android.com>
Throw NullPointerException if tag is null in PowerManager.newWakelock()
Print wakelock owner's uid and pid in dumpsys power output.
BUG: 2522675
Change-Id: I462c7f8c49f9896b2f58cef5a678ebd2c062a8f7
Signed-off-by: Mike Lockwood <lockwood@android.com>
ShutdownThread.reboot() does return so we need to block after calling it
to prevent PowerManager.reboot() from returning.
Since PowerManager.reboot() can now take significantly longer than before,
we now ignore ANRs during shutdown.
Change-Id: Ibceeb265ae382567215f6a399108d8be3a7bbc95
Signed-off-by: Mike Lockwood <lockwood@android.com>