From 809ad0fce357de0a55fbc57356a06f29a1021e3b Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Mon, 26 Oct 2009 22:10:33 -0400 Subject: 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 --- .../com/android/server/PowerManagerService.java | 36 ++++++++++++++++------ 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'services') 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); } } } -- cgit v1.1