summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2009-10-26 22:10:33 -0400
committerMike Lockwood <lockwood@android.com>2009-10-26 22:12:06 -0400
commit809ad0fce357de0a55fbc57356a06f29a1021e3b (patch)
tree6adbcc230b766a58ca3f4d1eefe648e1778644e6
parent54620b1a77e51b3fa531dbd099bd69c39d7d0029 (diff)
downloadframeworks_base-809ad0fce357de0a55fbc57356a06f29a1021e3b.zip
frameworks_base-809ad0fce357de0a55fbc57356a06f29a1021e3b.tar.gz
frameworks_base-809ad0fce357de0a55fbc57356a06f29a1021e3b.tar.bz2
PowerManagerService: Clear Binder calling identity around calls to Sensor Manager.
This fixes a problem that resulted in bogus battery statistics for the prox and light sensors due to the sensors being enabled in an app's context and disabled in the system context. Fixes problems reported in bug b/2211960 Change-Id: Ib0d3d9d06f043b386d3b8d494b9bad5bd40bb6e1 Signed-off-by: Mike Lockwood <lockwood@android.com>
-rw-r--r--services/java/com/android/server/PowerManagerService.java36
1 files changed, 27 insertions, 9 deletions
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index aad576f..f3a91e7 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -2273,15 +2273,27 @@ class PowerManagerService extends IPowerManager.Stub
if (mSpew) {
Log.d(TAG, "enableProximityLockLocked");
}
- mSensorManager.registerListener(mProximityListener, mProximitySensor,
- SensorManager.SENSOR_DELAY_NORMAL);
+ // clear calling identity so sensor manager battery stats are accurate
+ long identity = Binder.clearCallingIdentity();
+ try {
+ mSensorManager.registerListener(mProximityListener, mProximitySensor,
+ SensorManager.SENSOR_DELAY_NORMAL);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
private void disableProximityLockLocked() {
if (mSpew) {
Log.d(TAG, "disableProximityLockLocked");
}
- mSensorManager.unregisterListener(mProximityListener);
+ // clear calling identity so sensor manager battery stats are accurate
+ long identity = Binder.clearCallingIdentity();
+ try {
+ mSensorManager.unregisterListener(mProximityListener);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
synchronized (mLocks) {
if (mProximitySensorActive) {
mProximitySensorActive = false;
@@ -2296,12 +2308,18 @@ class PowerManagerService extends IPowerManager.Stub
}
if (mSensorManager != null && mLightSensorEnabled != enable) {
mLightSensorEnabled = enable;
- if (enable) {
- mSensorManager.registerListener(mLightListener, mLightSensor,
- SensorManager.SENSOR_DELAY_NORMAL);
- } else {
- mSensorManager.unregisterListener(mLightListener);
- mHandler.removeCallbacks(mAutoBrightnessTask);
+ // clear calling identity so sensor manager battery stats are accurate
+ long identity = Binder.clearCallingIdentity();
+ try {
+ if (enable) {
+ mSensorManager.registerListener(mLightListener, mLightSensor,
+ SensorManager.SENSOR_DELAY_NORMAL);
+ } else {
+ mSensorManager.unregisterListener(mLightListener);
+ mHandler.removeCallbacks(mAutoBrightnessTask);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
}
}
}