private void initialize() {
mPowerState = new DisplayPowerState(
new ElectronBeam(mDisplayManager), mDisplayBlanker,
mLights.getLight(LightsService.LIGHT_ID_BACKLIGHT));
}
private void setScreenOn(boolean on) { if (!mPowerState.isScreenOn() == on) {
mPowerState.setScreenOn(on);
if (on) {
mNotifier.onScreenOn();
} else {
mNotifier.onScreenOff();
}
}
/**
* Sets whether the screen is on or off.
*/
public void setScreenOn(boolean on) {
if (mScreenOn != on) {
if (DEBUG) {
Slog.d(TAG, "setScreenOn: on=" + on);
}
mScreenOn = on;
mScreenReady = false;
scheduleScreenUpdate();
}
}
private void scheduleScreenUpdate() {
if (!mScreenUpdatePending) {
mScreenUpdatePending = true;
postScreenUpdateThreadSafe();
}
}
private void postScreenUpdateThreadSafe() {
mHandler.removeCallbacks(mScreenUpdateRunnable);
mHandler.post(mScreenUpdateRunnable);
}
private final Runnable mScreenUpdateRunnable = new Runnable() {
@Override
public void run() {
mScreenUpdatePending = false;
int brightness = mScreenOn && mElectronBeamLevel > 0f ? mScreenBrightness : 0;
if (mPhotonicModulator.setState(mScreenOn, brightness)) {
mScreenReady = true;
invokeCleanListenerIfNeeded();
}
}
};
public boolean setState(boolean on, int backlight) {
synchronized (mLock) {
if (on != mPendingOn || backlight != mPendingBacklight) {
if (DEBUG) {
Slog.d(TAG, "Requesting new screen state: on=" + on
+ ", backlight=" + backlight);
}
if (YulongFeature.FEATURE_YULONG) {
Slog.d(TAG, "Requesting new screen state: on=" + on
+ ", backlight=" + backlight + ", mChangeInProgress=" + mChangeInProgress);
}
mPendingOn = on;
mPendingBacklight = backlight;
if (!mChangeInProgress) {
mChangeInProgress = true;
Slog.i(TAG, "setState : AsyncTask.THREAD_POOL_EXECUTOR.execute(mTask)");
AsyncTask.THREAD_POOL_EXECUTOR.execute(mTask);
}
}
return mChangeInProgress;
}
}
private final Runnable mTask = new Runnable() {
@Override
public void run() {
// Apply pending changes untildone.
for (;;) {
final boolean on;
final boolean onChanged;
final int backlight;
final booleanbacklightChanged;
synchronized (mLock) {
on = mPendingOn;
onChanged = (on !=mActualOn);
backlight = mPendingBacklight;
backlightChanged =(backlight != mActualBacklight);
if (!onChanged&& !backlightChanged) {
mChangeInProgress =false;
break;
}
mActualOn = on;
mActualBacklight =backlight;
}
if (onChanged &&on) {
mDisplayBlanker.unblankAllDisplays();
}
if (backlightChanged) {
mBacklight.setBrightness(backlight);
}
if (onChanged &&!on) {
mDisplayBlanker.blankAllDisplays();
}
}
// Let the outer class knowthat all changes have been applied.
postScreenUpdateThreadSafe();
}
};
public void setBrightness(int brightness) {
setBrightness(brightness, BRIGHTNESS_MODE_USER);
}
public void setBrightness(int brightness, int brightnessMode) {
synchronized (this) {
int color = brightness & 0x000000ff;
color = 0xff000000 | (color << 16) | (color << 8) | color;
setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
}
}