Loading services/java/com/android/server/PowerManagerService.java +95 −43 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ import java.util.Observable; import java.util.Observer; class PowerManagerService extends IPowerManager.Stub implements LocalPowerManager, Watchdog.Monitor, SensorEventListener { implements LocalPowerManager, Watchdog.Monitor { private static final String TAG = "PowerManagerService"; static final String PARTIAL_NAME = "PowerManagerService"; Loading Loading @@ -190,6 +190,9 @@ class PowerManagerService extends IPowerManager.Stub private BatteryService mBatteryService; private SensorManager mSensorManager; private Sensor mProximitySensor; private Sensor mLightSensor; private boolean mLightSensorEnabled; private float mLightSensorValue = -1; private boolean mDimScreen = true; private long mNextTimeout; private volatile int mPokey = 0; Loading @@ -210,6 +213,7 @@ class PowerManagerService extends IPowerManager.Stub // could be either static or controllable at runtime private static final boolean mSpew = false; private static final boolean mDebugLightSensor = false; /* static PrintStream mLog; Loading Loading @@ -1171,7 +1175,7 @@ class PowerManagerService extends IPowerManager.Stub // Finally, set the flag that prevents the screen from turning on. // (Below, in setPowerState(), we'll check mPreventScreenOn and // we *won't* call Power.setScreenState(true) if it's set.) // we *won't* call setScreenStateLocked(true) if it's set.) mPreventScreenOn = true; } else { // (Re)enable the screen. Loading @@ -1189,9 +1193,9 @@ class PowerManagerService extends IPowerManager.Stub Log.d(TAG, "preventScreenOn: turning on after a prior preventScreenOn(true)!"); } int err = Power.setScreenState(true); int err = setScreenStateLocked(true); if (err != 0) { Log.w(TAG, "preventScreenOn: error from Power.setScreenState(): " + err); Log.w(TAG, "preventScreenOn: error from setScreenStateLocked(): " + err); } } Loading Loading @@ -1246,6 +1250,14 @@ class PowerManagerService extends IPowerManager.Stub } }; private int setScreenStateLocked(boolean on) { int err = Power.setScreenState(on); if (err == 0) { enableLightSensor(on && mAutoBrightessEnabled); } return err; } private void setPowerState(int state) { setPowerState(state, false, false); Loading Loading @@ -1334,7 +1346,7 @@ class PowerManagerService extends IPowerManager.Stub reallyTurnScreenOn = false; } if (reallyTurnScreenOn) { err = Power.setScreenState(true); err = setScreenStateLocked(true); long identity = Binder.clearCallingIdentity(); try { mBatteryStats.noteScreenBrightness( Loading @@ -1346,7 +1358,7 @@ class PowerManagerService extends IPowerManager.Stub Binder.restoreCallingIdentity(identity); } } else { Power.setScreenState(false); setScreenStateLocked(false); // But continue as if we really did turn the screen on... err = 0; } Loading Loading @@ -1391,7 +1403,7 @@ class PowerManagerService extends IPowerManager.Stub EventLog.writeEvent(LOG_POWER_SCREEN_STATE, 0, becauseOfUser ? 1 : 0, mTotalTouchDownTime, mTouchCycles); mLastTouchDown = 0; int err = Power.setScreenState(false); int err = setScreenStateLocked(false); if (mScreenOnStartTime != 0) { mScreenOnTime += SystemClock.elapsedRealtime() - mScreenOnStartTime; mScreenOnStartTime = 0; Loading Loading @@ -1809,6 +1821,14 @@ class PowerManagerService extends IPowerManager.Stub } } private void lightSensorChangedLocked(float value) { if (mDebugLightSensor) { Log.d(TAG, "lightSensorChangedLocked " + value); } mLightSensorValue = value; // more to do here } /** * The user requested that we go to sleep (probably with the power button). * This overrides all wake locks that are held. Loading Loading @@ -1900,7 +1920,7 @@ class PowerManagerService extends IPowerManager.Stub mHardware.setAutoBrightness_UNCHECKED(mAutoBrightessEnabled); setBacklightBrightness((int)mScreenBrightness.curValue); } else { // not yet implemented enableLightSensor(screenIsOn() && mAutoBrightessEnabled); } } Loading Loading @@ -2050,6 +2070,14 @@ class PowerManagerService extends IPowerManager.Stub } void systemReady() { mSensorManager = new SensorManager(mHandlerThread.getLooper()); mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); // don't bother with the light sensor if auto brightness is handled in hardware if (!mHasHardwareAutoBrightness) { mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); enableLightSensor(mAutoBrightessEnabled); } synchronized (mLocks) { Log.d(TAG, "system ready!"); mDoneBooting = true; Loading Loading @@ -2077,8 +2105,6 @@ class PowerManagerService extends IPowerManager.Stub | PowerManager.FULL_WAKE_LOCK | PowerManager.SCREEN_DIM_WAKE_LOCK; // call getSensorManager() to make sure mProximitySensor is initialized getSensorManager(); if (mProximitySensor != null) { result |= PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK; } Loading Loading @@ -2117,26 +2143,19 @@ class PowerManagerService extends IPowerManager.Stub } } private SensorManager getSensorManager() { if (mSensorManager == null) { mSensorManager = new SensorManager(mHandlerThread.getLooper()); mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); } return mSensorManager; } private void enableProximityLockLocked() { if (mSpew) { Log.d(TAG, "enableProximityLockLocked"); } mSensorManager.registerListener(this, mProximitySensor, SensorManager.SENSOR_DELAY_NORMAL); mSensorManager.registerListener(mProximityListener, mProximitySensor, SensorManager.SENSOR_DELAY_NORMAL); } private void disableProximityLockLocked() { if (mSpew) { Log.d(TAG, "disableProximityLockLocked"); } mSensorManager.unregisterListener(this); mSensorManager.unregisterListener(mProximityListener); synchronized (mLocks) { if (mProximitySensorActive) { mProximitySensorActive = false; Loading @@ -2145,6 +2164,22 @@ class PowerManagerService extends IPowerManager.Stub } } private void enableLightSensor(boolean enable) { if (mDebugLightSensor) { Log.d(TAG, "enableLightSensor " + enable); } if (mSensorManager != null && mLightSensorEnabled != enable) { mLightSensorEnabled = enable; if (enable) { mSensorManager.registerListener(mLightListener, mLightSensor, SensorManager.SENSOR_DELAY_NORMAL); } else { mSensorManager.unregisterListener(mLightListener); } } } SensorEventListener mProximityListener = new SensorEventListener() { public void onSensorChanged(SensorEvent event) { long milliseconds = event.timestamp / 1000000; synchronized (mLocks) { Loading Loading @@ -2173,4 +2208,21 @@ class PowerManagerService extends IPowerManager.Stub public void onAccuracyChanged(Sensor sensor, int accuracy) { // ignore } }; SensorEventListener mLightListener = new SensorEventListener() { public void onSensorChanged(SensorEvent event) { synchronized (mLocks) { int value = (int)event.values[0]; if (mDebugLightSensor) { Log.d(TAG, "onSensorChanged: light value: " + value); } lightSensorChangedLocked(value); } } public void onAccuracyChanged(Sensor sensor, int accuracy) { // ignore } }; } Loading
services/java/com/android/server/PowerManagerService.java +95 −43 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ import java.util.Observable; import java.util.Observer; class PowerManagerService extends IPowerManager.Stub implements LocalPowerManager, Watchdog.Monitor, SensorEventListener { implements LocalPowerManager, Watchdog.Monitor { private static final String TAG = "PowerManagerService"; static final String PARTIAL_NAME = "PowerManagerService"; Loading Loading @@ -190,6 +190,9 @@ class PowerManagerService extends IPowerManager.Stub private BatteryService mBatteryService; private SensorManager mSensorManager; private Sensor mProximitySensor; private Sensor mLightSensor; private boolean mLightSensorEnabled; private float mLightSensorValue = -1; private boolean mDimScreen = true; private long mNextTimeout; private volatile int mPokey = 0; Loading @@ -210,6 +213,7 @@ class PowerManagerService extends IPowerManager.Stub // could be either static or controllable at runtime private static final boolean mSpew = false; private static final boolean mDebugLightSensor = false; /* static PrintStream mLog; Loading Loading @@ -1171,7 +1175,7 @@ class PowerManagerService extends IPowerManager.Stub // Finally, set the flag that prevents the screen from turning on. // (Below, in setPowerState(), we'll check mPreventScreenOn and // we *won't* call Power.setScreenState(true) if it's set.) // we *won't* call setScreenStateLocked(true) if it's set.) mPreventScreenOn = true; } else { // (Re)enable the screen. Loading @@ -1189,9 +1193,9 @@ class PowerManagerService extends IPowerManager.Stub Log.d(TAG, "preventScreenOn: turning on after a prior preventScreenOn(true)!"); } int err = Power.setScreenState(true); int err = setScreenStateLocked(true); if (err != 0) { Log.w(TAG, "preventScreenOn: error from Power.setScreenState(): " + err); Log.w(TAG, "preventScreenOn: error from setScreenStateLocked(): " + err); } } Loading Loading @@ -1246,6 +1250,14 @@ class PowerManagerService extends IPowerManager.Stub } }; private int setScreenStateLocked(boolean on) { int err = Power.setScreenState(on); if (err == 0) { enableLightSensor(on && mAutoBrightessEnabled); } return err; } private void setPowerState(int state) { setPowerState(state, false, false); Loading Loading @@ -1334,7 +1346,7 @@ class PowerManagerService extends IPowerManager.Stub reallyTurnScreenOn = false; } if (reallyTurnScreenOn) { err = Power.setScreenState(true); err = setScreenStateLocked(true); long identity = Binder.clearCallingIdentity(); try { mBatteryStats.noteScreenBrightness( Loading @@ -1346,7 +1358,7 @@ class PowerManagerService extends IPowerManager.Stub Binder.restoreCallingIdentity(identity); } } else { Power.setScreenState(false); setScreenStateLocked(false); // But continue as if we really did turn the screen on... err = 0; } Loading Loading @@ -1391,7 +1403,7 @@ class PowerManagerService extends IPowerManager.Stub EventLog.writeEvent(LOG_POWER_SCREEN_STATE, 0, becauseOfUser ? 1 : 0, mTotalTouchDownTime, mTouchCycles); mLastTouchDown = 0; int err = Power.setScreenState(false); int err = setScreenStateLocked(false); if (mScreenOnStartTime != 0) { mScreenOnTime += SystemClock.elapsedRealtime() - mScreenOnStartTime; mScreenOnStartTime = 0; Loading Loading @@ -1809,6 +1821,14 @@ class PowerManagerService extends IPowerManager.Stub } } private void lightSensorChangedLocked(float value) { if (mDebugLightSensor) { Log.d(TAG, "lightSensorChangedLocked " + value); } mLightSensorValue = value; // more to do here } /** * The user requested that we go to sleep (probably with the power button). * This overrides all wake locks that are held. Loading Loading @@ -1900,7 +1920,7 @@ class PowerManagerService extends IPowerManager.Stub mHardware.setAutoBrightness_UNCHECKED(mAutoBrightessEnabled); setBacklightBrightness((int)mScreenBrightness.curValue); } else { // not yet implemented enableLightSensor(screenIsOn() && mAutoBrightessEnabled); } } Loading Loading @@ -2050,6 +2070,14 @@ class PowerManagerService extends IPowerManager.Stub } void systemReady() { mSensorManager = new SensorManager(mHandlerThread.getLooper()); mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); // don't bother with the light sensor if auto brightness is handled in hardware if (!mHasHardwareAutoBrightness) { mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); enableLightSensor(mAutoBrightessEnabled); } synchronized (mLocks) { Log.d(TAG, "system ready!"); mDoneBooting = true; Loading Loading @@ -2077,8 +2105,6 @@ class PowerManagerService extends IPowerManager.Stub | PowerManager.FULL_WAKE_LOCK | PowerManager.SCREEN_DIM_WAKE_LOCK; // call getSensorManager() to make sure mProximitySensor is initialized getSensorManager(); if (mProximitySensor != null) { result |= PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK; } Loading Loading @@ -2117,26 +2143,19 @@ class PowerManagerService extends IPowerManager.Stub } } private SensorManager getSensorManager() { if (mSensorManager == null) { mSensorManager = new SensorManager(mHandlerThread.getLooper()); mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); } return mSensorManager; } private void enableProximityLockLocked() { if (mSpew) { Log.d(TAG, "enableProximityLockLocked"); } mSensorManager.registerListener(this, mProximitySensor, SensorManager.SENSOR_DELAY_NORMAL); mSensorManager.registerListener(mProximityListener, mProximitySensor, SensorManager.SENSOR_DELAY_NORMAL); } private void disableProximityLockLocked() { if (mSpew) { Log.d(TAG, "disableProximityLockLocked"); } mSensorManager.unregisterListener(this); mSensorManager.unregisterListener(mProximityListener); synchronized (mLocks) { if (mProximitySensorActive) { mProximitySensorActive = false; Loading @@ -2145,6 +2164,22 @@ class PowerManagerService extends IPowerManager.Stub } } private void enableLightSensor(boolean enable) { if (mDebugLightSensor) { Log.d(TAG, "enableLightSensor " + enable); } if (mSensorManager != null && mLightSensorEnabled != enable) { mLightSensorEnabled = enable; if (enable) { mSensorManager.registerListener(mLightListener, mLightSensor, SensorManager.SENSOR_DELAY_NORMAL); } else { mSensorManager.unregisterListener(mLightListener); } } } SensorEventListener mProximityListener = new SensorEventListener() { public void onSensorChanged(SensorEvent event) { long milliseconds = event.timestamp / 1000000; synchronized (mLocks) { Loading Loading @@ -2173,4 +2208,21 @@ class PowerManagerService extends IPowerManager.Stub public void onAccuracyChanged(Sensor sensor, int accuracy) { // ignore } }; SensorEventListener mLightListener = new SensorEventListener() { public void onSensorChanged(SensorEvent event) { synchronized (mLocks) { int value = (int)event.values[0]; if (mDebugLightSensor) { Log.d(TAG, "onSensorChanged: light value: " + value); } lightSensorChangedLocked(value); } } public void onAccuracyChanged(Sensor sensor, int accuracy) { // ignore } }; }