diff options
| author | Mike Lockwood <lockwood@android.com> | 2009-10-26 22:10:33 -0400 |
|---|---|---|
| committer | Mike Lockwood <lockwood@android.com> | 2009-10-26 22:12:06 -0400 |
| commit | 809ad0fce357de0a55fbc57356a06f29a1021e3b (patch) | |
| tree | 6adbcc230b766a58ca3f4d1eefe648e1778644e6 /services/java | |
| parent | 54620b1a77e51b3fa531dbd099bd69c39d7d0029 (diff) | |
| download | frameworks_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>
Diffstat (limited to 'services/java')
| -rw-r--r-- | services/java/com/android/server/PowerManagerService.java | 36 |
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); } } } |
