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
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
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
... 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
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
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>
Use new observer before rebooting and shutting down.
Add some unit tests for unmount and shutdown code paths
Fix registering/unregistering part in MountService
Use ShutdownThread in PowerManager.reboot()
Add reboot support to ShutdownThread.
Remove MountService code from PowerManagerService.java and Power.java.
Clean shutdown/reboot is handled exclusively by ShutdownThread now.
Change-Id: Iefb157451d3d9c426cb431707b870a873c09123d
Some devices will not activate the light sensor properly on boot
unless we do this.
Change-Id: Ia27b6fc2d515c31eb8597e1d52127d70e2643bd7
BUG: 2269307
Signed-off-by: Mike Lockwood <lockwood@android.com>
Fixes a race condition that resulted in an IndexOutOfBoundsException
due to a wakelock being released while dump() was iterating through the
wakelock list.
BUG: 2469910
Change-Id: I10d7a65b9f397934942b290cb047c4ca81214297
Signed-off-by: Mike Lockwood <lockwood@android.com>
- Move android.storage.* -> android.os.storage.* and refactor users
- Refactor generic shares back to explicit ums enable/disable/isEnabled
- Remove media insert/removed event callbacks (not ready for Froyo)
- Remove 'label' from volume state change callbacks
- Add public API functions for enabling/disabling USB mass storage (permissions enforced
in MountSevice)
- Remove some stray un-needed import lines
- Move android.os.IMountService / android.os.IMountServiceListener -> android.os.storage
- Improve code comments
Updated:
MountService: Add dup state check and move debugging behind a conditional
UsbStorageActivity: Fix review comments + a TODO
StorageNotification: Add @Override tags
StorageManager: Don't use a static Listener list
MountService: Reduce bloat and fix == where I meant .equals()
PackageManagerTests: Update for new API
Signed-off-by: San Mehat <san@google.com>
This is an experimental change to avoid the light sensor screen fluctuation problem.
We only do this when undocked to since the lighting should be stable in the docked case
and since the dock keeps the screen on we need to be able to adjust the lighting.
Change-Id: I70afcc393f51f2679be8228d6cb993ddc07e5986
BUG: 2387223
Signed-off-by: Mike Lockwood <lockwood@android.com>
Add new ALLOW_LOCK_WHILE_SCREEN_ON window manager flag, which when set
causes the window manager to put up the lockscreen after the
normal screen timeout has elapsed.
Add plumbing to pass PowerManager.userActivity() to the window manager policy.
Change-Id: I05adc52bad39c56031a08e8ec3cbcf5c2d9b9827
Signed-off-by: Mike Lockwood <lockwood@android.com>
The crashes are also reported to the event log (and of course the
main logcat, like they always have been). Ordinary Log.e(t,m,e) isn't dropboxed
but there's a new Log.wtf() which always is. (Still @pending in this change.)
Add a hook to IPowerManager to crash the system server on demand
(only for apps with REBOOT permission, since it's basically a restart).
This is not exposed in PowerManager, must be invoked directly -- mostly
this is there so "Bad Behavior" in dev tools can do it.
We can now locate event log tag definitions in individual packages
(and java constants for the tag numbers get auto-generated), so move
all the tags used by the system server into the package.
Merge commit '678c2e35768a5426b4ad8f67c836008e7751a353' into eclair-mr2
* commit '678c2e35768a5426b4ad8f67c836008e7751a353':
Add WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR to indicate screen was turned off by the proximity sensor.
Part of a fix for bug b/2300622 (Proximity sensor always blows up the lock screen while in call)
Change-Id: I9ef888638b19540a78a34507d52ff522f505102f
Signed-off-by: Mike Lockwood <lockwood@android.com>
Add Light subclass to replace LightsService light setting methods
Remove LightsService.setAttentionLight() and LightsService.pulseBreathingLight()
Add support for Wifi and Bluetooth lights
Change-Id: I707f53cda27481c25649f402567a665d52e9cb62
Signed-off-by: Mike Lockwood <lockwood@android.com>
The lights support is only needed by PowerManagerService and NotificationManagerService, so we do not need a Binder API for it.
Move backlight and notification light support to new LightsService class.
The camera flash is now handled directly by the camera HAL, so the flash Hardware service flash support is obsolete.
Change-Id: I086d681f54668e7f7de3e8b90df3de19d59833c5
Signed-off-by: Mike Lockwood <lockwood@android.com>
The new backlightBrightness field works similarly as the existing WindowManager.LayoutParams.screenBrightness field
Needed for bugs:
b/2233655 (under low ambient light the touch keys remain illuminated during video playback and never timeout)
b/2221079 (Backlight for home/search/back/etc buttons should turn off when in dock in night mode)
Change-Id: I60dfecdc7bb653b0db38094464de651220b3d438